LINUX.ORG.RU

Говорили что Перл старый, ни на что не способный язык. Проверим?(часть 2)

 , ,


5

4

Задание на сейчас. найти максимальное вхождение одного слова в другое в СЛОВАРЕ - смотри ниже!!!

Перл - со словарём не справился;

Для C++ . - У меня перебирает весь словарь за 17 секунд;

Для JS - Около минуты. Говорили что Перл старый, ни на что не способный язык. Проверим?(часть 2) (комментарий);

Всё. Пока ничего другого, полностью рабочего нет.

Не нужно писать решение для единичных слов. Нужно - решение для словаря.

Возьмём список русских существительных, например отсюда: https://github.com/Harrix/Russian-Nouns/releases/download/v2.0/russian_nouns_v2.0.zip

Нужно найти максимальное вхождение одного слова в другое. Полные вхождения слов - не допускаются - это вроде было ясно и понятно всем. — Это задание. Это!!!


Самое простое и наглядное решение в составлении слов это:

/(\w+) \1/

Так-как даже я уже ничего не могу найти в первой части:

Говорили что Перл старый, ни на что не способный язык. Проверим?

Предлагаю собрать сюда наиболее значимые решения из 1 части.

Итак:

В начале, мы просто делали из

шлакоблок + окунь = шлакоблокунь

На разных языках. Там есть решения. Затем все стали зачем то уменьшать количество строк и символов - победил Перл - но это вообще не интересно.

Теперь, самое главное:

Говорили что Перл старый, ни на что не способный язык. Проверим?

Здесь все согласились что Перл хороший и годный язык, но С++ всё равно быстрее. В связи с этим, было предложено:

Говорили что Перл старый, ни на что не способный язык. Проверим?


Возьмём список русских существительных, например отсюда: https://github.com/Harrix/Russian-Nouns/releases/download/v2.0/russian_nouns_v2.0.zip На основе этого списка создадим новый, со всеми новыми сочетаниями, где перекрываются не менее 3 букв. Тут даже секундомером можно замерять. У меня на моем стареньком ноуте ушло несколько минут и сгенерировалось почти 40 Мбайт из одного. У Вас есть код на Перле и C++. Можете сравнить время. Так как здесь тоже работа со строками, то у Перла есть шанс.

Но потом договорились до изменения задания:

Тут ведь уже говорили - что основное время программы - это ввод и вывод. То есть в задании нужно сделать как можно меньше выводов.

Единственное что мне приходит в голову - найти максимальное вхождение одного слова в другое. —!!! Это и стало основным и новым заданием. !!!—


Эти все задачи были решены для Перл и С++

Для Перл. 3 варианта решения. Но ни одно не берёт весь словарь:

#!/usr/bin/perl

use utf8;
use open qw(:std :utf8); 

$t = time();

$| = 1;
open D, 'russian_nouns.txt';

for(0..3000) {
  $vv=<D>;
  $vv =~ s/\s+$//;
  @d = (@d, $vv);
  }

close D;
@d2 = @d;


for $v (@d){
    ++$ii; if (++$j>99){
    $t2 = time()-$t;
    print $ii." прошло $t2 секунд. $sov1 $str\n"; $j=0;}

  for $v2 (@d2) {&resh3 ()}
  
M1:  
  }
  
sub resh3 {
  
  $lv = length $v;
  $lv2 = length $v2;

  if($lv>$lv2) {
  
    for($i=$lv2; $i>1; $i--) {
      $c = substr ($v, -$i,);
      $c2 = substr ($v2, 0, $i);
      if (($c eq $c2) and ($c ne $v2) and ($c ne $v)){
          $sov = length $c;
          if ($sov>$sov1){$sov1=$sov; $str="$c = $v-$v2"}
          }
        
  
      }

  
  }
  else {
    
        for($i=$lv; $i>1; $i--) {
      $c = substr ($v2, -$i,);
      $c2 = substr ($v, 0, $i);
      if (($c eq $c2) and ($c ne $v2) and ($c ne $v)){
          $sov = length $c;
          if ($sov>$sov1){$sov1=$sov; $str="$c = $v-$v2"}
          }
        
  
      }
    
    
    
    }
  
  
}
  

sub resh1 {  
    $r=''; $l='';
    for(split(//,$v2)){
      $r .= $_;
      if ($v =~ /$r$/) {$l=$r}  
      }
    #print "$v-$l-$v2\n" if length $l>4 and $v ne $l;
    
    if ($l and ($l ne $v2) and ($l ne $v)){
    $sov = length $l;
    if ($sov>$sov1){$sov1=$sov; $str="$l - $v-$v2"}
}
}


sub resh2 {
  
    if($v ne $v2) {
    $_ = "$v $v2";
    /([^ ]*?)([^ ]*) \2/;
    
    if ($2 and ($2 ne $v2) and ($2 ne $v)){
    $sov = length $2;
    if ($sov>$sov1){$sov1=$sov; $str="$2 - $_"}

}
  }}
  

Для C++ . У меня перебирает весь словарь за 17 секунд.:

#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;

void check_combine(string &res, size_t &len, const string &s1, const string &s2)
{
    len = 0;
    for(auto &ch: s1)
    {
        if(len == s2.size())
        {
            break;
        }
        if(ch == s2.at(len))
        {
            len += 1;
        }
        else
        {
            len = 0;
        }
    }
    if(!len)
    {
        res = "";
    }
    else
    {
        string s3  {s2};
        s3.erase(0, len);
        res = s1;
        res += s3;
    }
}

void getlines(vector<string> &lines, fstream & f)
{
    string str;
    while(getline(f, str))
    {
        lines.push_back(str);
    }
}

int main()
{
    fstream inFile;
    inFile.open ("russian_nouns.txt", std::fstream::in);
    vector<string> lines;
    getlines(lines, inFile);
    size_t maxLen  {0};
    size_t rusMaxLen  {0};
    string maxRes  {""};
    time_t startTime = time(nullptr);
    size_t counter  {0};
    for(auto &s1: lines)
    {
        for(auto &s2: lines)
        {
            counter += 1;
            if(s1 == s2)
            {
                continue;
            }
            if(s1.size() < maxLen)
            {
                continue;
            }
            if(s2.size() < maxLen)
            {
                continue;
            }
            size_t len  {0};
            string res;
            check_combine(res, len, s1, s2);
            if(res == s1)
            {
                continue;
            }
            if(res == s2)
            {
                continue;
            }
            if(len > maxLen)
            {
                maxLen = len;
                rusMaxLen = maxLen / 2;
                time_t delta = time(nullptr) - startTime;
                string deltaStr  {s2};
                deltaStr.erase(len);
                maxRes = deltaStr + " - " + s1 + '-' + s2;
                cout << counter << "\t прошло: " << delta << " секунд, длина: ";
                cout << rusMaxLen << ", " << maxRes << '\n';
            }
        }
    }
    cout << "\n\nРезультат: " << rusMaxLen << ", " << maxRes << '\n';
    time_t delta = time(nullptr) - startTime;
    cout << "Полное время переборов: " << delta;
    inFile.close();
    return 0;
}


Ниже - не решения текущей задачи! Не решения. Ниже - просто выборка всех решений, на всех языках с прежней темы.

Блин. Как же сложно с людьми с недостаточным образованием. Я вот уже 6 раз написал - и всё равно будут писать про Шлокоблококунь.

php:

➜ php i.php "папа + папаха"
папаха%                                                                                                                                                                   ➜ php i.php "шлакоблок + окунь"
шлакоблокунь%                                                                                                                                                              
➜ cat i.php
<?php
for ($i = 1; $i <= mb_strlen(trim(explode('+', $argv[1])[0])) && $i <= mb_strlen(trim(explode('+',$argv[1])[1])); $i++)
    if (mb_substr(trim(explode('+', $argv[1])[0]), mb_strlen(trim(explode('+',$argv[1])[0])) - $i) === mb_substr(trim(explode('+',$argv[1])[1]), 0, $i)) 
        $j = $i;
echo (isset($j)) ?  trim(explode('+',$argv[1])[0]). mb_substr(trim(explode('+',$argv[1])[1]), $j) : 'error';

Говорили что Перл старый, ни на что не способный язык. Проверим? (комментарий)



Последнее исправление: sudopacman (всего исправлений: 25)
Ответ на: комментарий от kompospec

Горшки сортируют?

Есть утилиты командной строки, такие как sort и uniq. Задача по сортировке текстового файла и нахождению N наиболее частых слов делается простой командой в Linux. И это умеет любой. Или знает как начать уметь это. Задача не для программиста.

cat test.txt
one
two
one
three
one
four
five
four

и

tr -c '[:alnum:]' '[\n*]' < test.txt | sort | uniq -c | sort -nr | head  -10
      3 one
      2 four
      1 two
      1 three
      1 five

The Linux way!

Примечание: способ противопоказан для виндузятников и жирных. Последствия могу быть самыми разными.

anonymous
()
Ответ на: комментарий от kompospec

А вы что, никогда не видели настоящий мужской Диплом в деле?

anonymous
()
Ответ на: комментарий от anonymous

Компостец таинственно молчит, покраснел

Мы с ним чатимся.

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Примечание: способ противопоказан для виндузятников и жирных. Последствия могу быть самыми разными.

У него 3 млр. алых роз …

anonymous
()
Ответ на: комментарий от kompospec

Какая разница, если профильного и связанного с информационными технологиями образования у тебя всё равно нет?

anonymous
()
Ответ на: комментарий от anonymous

Какая разница, если профильного и связанного с информационными технологиями образования у тебя всё равно нет?

Андрей у меня космический инженер. Почти ученый … Говорит, должен был лететь в космос, но СССР распался …

Владимир

anonymous
()
Ответ на: комментарий от anonymous

У нас шло программирование все 5 лет. Начиная с Фортрана77 и перфокарт с перфолентами и заканчивая Бейсиками

kompospec
() автор топика
Ответ на: комментарий от kompospec

А модераторы этого сайта допускают популяризацию гомосексуализма?

А вы не популяризируйте … Это ваше личное дело и ваш выбор …

Владимир

anonymous
()
Ответ на: комментарий от kompospec

Хм. А полный код perl-скрипта можно?

anonymous
()
Ответ на: комментарий от kompospec

И что, есть какие-либо основания этим гордиться? Ты же на уровне бейсика так и остался, даже нет, деградировал только.

anonymous
()
Ответ на: комментарий от kompospec

Прошу модераторов перевести тему в статус - Без Анонимов. Спасибо.

А с вами тут никто больше и не общается кроме анонимов … И то только потому, что вы красивый …

Владимир

anonymous
()
Ответ на: комментарий от kompospec

У нас шло программирование все 5 лет. Начиная с Фортрана77 и перфокарт с перфолентами и заканчивая Бейсиками

Это на специальность подметальщика аэродромов? Вот же раньше образование было…

anonymous
()
Ответ на: комментарий от kompospec

Я всё больше и больше склоняюсь к тому, что в качестве основного языка программирования сейчас нужно выбирать JS

Не нужно. Тебе точно не нужно. Без чёткого понимания задач и возможностей среды исполнения и постоянного, непрерывного изучения актуальных стандартов и инструментария ты и с JS станешь такой же закостенелой макакой, каковой, собственно, являешься и с перлом и пыхом, и ещё одним лишним подтверждением бытующих на этом ресурсе стереотипов.

anonymous
()
Ответ на: комментарий от kompospec

Прошу модераторов перевести тему в статус - Без Анонимов. Спасибо.

Прошу модераторов перевести тему в статус – без @kompospec (так же известного как компостец). Спасибо.

anonymous
()
Ответ на: комментарий от kompospec

Что вам нужно? что вы всё ковыряетесь? Выискиваете что-то:

https://www.google.com/search?channel=fs&client=ubuntu&q=miltorg+%D0%BC%D0%B8%D0%BB%D0%BB%D0%B8%D0%B0%D1%80%D0%B4+%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9

Вы сами сказали, что данные поступают раз в несколько дней.
Вот и вопрос.
Какова организация их хранения /для обработки/? …

anonymous
()
Ответ на: комментарий от anonymous

Не тред а какой-то свободный полет фанеры над итальянским морем, проще говоря какая-то срань

anonymous
()
Ответ на: комментарий от anonymous

Генерируем трафик на полудохлом форуме. Плохо что ли? Радость Макскому. Но виновник торжества что-то перестал доставлять.

anonymous
()
Ответ на: комментарий от anonymous

Не тред а какой-то свободный полет фанеры над итальянским морем, проще говоря какая-то срань

Это

Сага о регулярных выражениях   

ТС почему-то про них все время речь ведет …

anonymous
()
Ответ на: комментарий от anonymous

ТС’а бы не швыряло туда-сюда, а то СДВГ какое-то без таблеток

Пора открывать 3-ю часть …

anonymous
()
Ответ на: комментарий от anonymous

Генерируем трафик на полудохлом форуме. Плохо что ли? Радость Макскому. Но виновник торжества что-то перестал доставлять.

Да он про тред по ссылке. А здесь, я не могу осилить на Lua, получается какая-то срань


function trim_spaces (str)
  if str == '' then
    return str
  else  
    local startPos = 1
    local endPos   = #str

    while (startPos < endPos and str:byte(startPos) <= 32) do
      startPos = startPos + 1
    end

    if startPos >= endPos then
      return ''
    else
      while (endPos > 0 and str:byte(endPos) <= 32) do
        endPos = endPos - 1
      end

      return str:sub(startPos, endPos)
    end
  end
end -- .function trim

-- see if the file exists
function file_exists(file)
  local f = io.open(file, "rb")
  if f then f:close() end
  return f ~= nil
end

-- get all lines from a file, returns an empty 
-- list/table if the file does not exist
function lines_from(file)
  if not file_exists(file) then return {} end
  lines = {}
  for line in io.lines(file) do 
    lines[#lines + 1] = trim_spaces(line)
  end
  return lines
end

-- tests the functions above
local file = '../../russian_nouns.txt'
local lines = lines_from(file)

-- -- print all line numbers and their contents
-- for k,v in pairs(lines) do
--   print('line[' .. k .. ']', v)
-- end


local found = ''
local fln = 0
local hti = ''
local xln = 0

function get_intersection(ar, br, fln)
  local i = 1

  for i = 1, #ar do

    if i == (#br + 1) then
      break
    end

    local r = ar:sub(i, i)

    if br:sub(i, i) == r then
    	i = i + 1
    else
    	i = 1
    end

  end

  if i < (fln + 1) or i >= (#ar + 1) or i >= (#br + 1) then
  	return '', 0
  end

  return ar:sub(1, #ar - i - 1) ..
     '[' ..
     ar:sub(#ar - i, #ar) ..
     ']' ..
     br:sub(i - 1, #br), i
end

sp = os.clock()

for i, f in pairs(lines) do
  for j, x in pairs(lines) do
  	if i ~= j then

  	end

    if i == j then
    	goto continue -- skip the same
    end

    if fln > 0 and ((#f <= (fln+2)) or (#x <= (fln+2))) then
    	goto continue -- looking for a longer
    end

		hti, xln = get_intersection(f, x, fln)
		if xln ~= 0 then
		   found, fln = hti, xln
		   print('F ' .. found .. ' L ' .. fln+1)
		end

    ::continue::
  end
end


print('found ' .. fln .. ' ' .. found .. ', after ' .. os.clock() - sp)

Что-то идёт не так….

anonymous
()
Ответ на: комментарий от anonymous

Просто у поповского Lua есть и интерпретатор и JIT. Но сейчас мне лень разбираться.

anonymous
()
Ответ на: комментарий от anonymous

Да я про любой его тред, несет человека из точки а в точку бэ, потом где-то улетает в цэ. Похоже на нескончаемый поток флуда между дырявыми полами.

anonymous
()
Ответ на: комментарий от anonymous

Филиал лолксов в девелопмент. Примерно как метапрог. Может Вальман стебётся? Что-то давно его не было.

anonymous
()
Ответ на: комментарий от anonymous

Похоже ТС хочет шабашку свою упростить …

anonymous
()
Ответ на: комментарий от anonymous

Филиал лолксов в девелопмент. Примерно как метапрог. Может Вальман стебётся? Что-то давно его не было.

Есть статья на эту тему. Правда заблоченная что-то. Вполне возможно, что заблоченная по инициативе ТС.

anonymous
()

По сравнению с первой темой - ТСу бан можно даже за то что флудит копипастой в первом сообщении, не умеет нормально оформлять репозиторий с чужим кодом и указанием авторов. В остальном полнейший мусор которому не место в Development. Терпению модеров поражаюсь.

anonymous
()
Ответ на: комментарий от anonymous

Перестань флиртовать с Андреем, у нас с ним настоящая мужская любовь. Это мой мужик!

anonymous
()
Ответ на: комментарий от anonymous

По сравнению с первой темой - ТСу бан можно даже за то что флудит копипастой в первом сообщении, не умеет нормально оформлять репозиторий с чужим кодом и указанием авторов. В остальном полнейший мусор которому не место в Development. Терпению модеров поражаюсь.

Безотносительно ТС по теме очень много. Кода, примеров и прочего. По окуням.

anonymous
()
Ответ на: комментарий от anonymous

Тред иллюстрирует выржание: Мусор на входе - мусор на выходе. Ну так поржать годится.

anonymous
()

Интересно, ТС в курсе, что создатель перла Ларри Уолл по образованию лингвист?

anonymous
()
Ответ на: комментарий от anonymous

Ларри Уолл поступил на работу в Unisys и в Лабораторию реактивного движения NASA (JPL).

Космический инженер - как и я.

kompospec
() автор топика
Ответ на: комментарий от kompospec

Благодаря языку Perl стартовал Yahoo — проект, авторам которого прекрасно удаётся заработок на сайте. С его же помощью создан Amazon и миллионы других сайтов.

https://ru.wikipedia.org/wiki/%D0%A3%D0%BE%D0%BB%D0%BB,_%D0%9B%D0%B0%D1%80%D1%80%D0%B8

kompospec
() автор топика
Ответ на: комментарий от anonymous

Да. Пока не стал космическим инженером. Всё просто. Нельзя быть слабоумным и космическим инженером. нельзя.

kompospec
() автор топика
Ответ на: комментарий от kompospec

Да. Пока не стал космическим инженером.

Что конкретно он там инженерил без профильного образования? Графики строил гнуплотом?

anonymous
()
Ответ на: комментарий от kompospec

Благодаря языку Perl стартовал Yahoo

Проект, исчезновение которого не заметил бы никто.

anonymous
()
Ответ на: комментарий от anonymous

By 1986, Wall needed a computer program that would scan text files, match patterns and print reports based on what it found. He also wanted the program to do various administrative tasks and connect with different interfaces on the JPL [Jet Propulsion Laboratory] and other systems.

В 1986 г., когда Ларри Уолл (Larry Wall) работал в лаборатории реактивного движения NASA, перед ним стояла задача синхронизация обмена данными между компьютерами в Санта-Монике, Калифорния, и Паоли, Пенсильвания. Этот проект включал также задачу создания отчетов на основании обмена данными.

Формировал отчёты. Просто космос.

anonymous
()
Ответ на: комментарий от anonymous

Формировал отчёты. Просто космос.

По сравнению с подметанием аэродромов – это просто космос.

anonymous
()

Блин, не ну нехороший человек, этот ТС. Там по исходному заданию с сикул.ру работа с хромосомами. Т.е. Юникода в принципе быть не может. И длина ключа всегда одинаковая. Вот же удод. 5_7_8_15_22_23_27_34_37_39

anonymous
()

Проверка номера кредитной карты

/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/

Дата

/^(?:(?:31(/|-|.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(/|-|.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(/|-|.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(/|-|.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/

IPv4

/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/

IPv6

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

Теперь вы видите какие удобные и простые регулярные выражения
anonymous
()
Ответ на: комментарий от anonymous

Теперь вы видите какие удобные и простые регулярные выражения

А РЫБАКОНЬ - детский лепет …

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.