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)
Ответ на: комментарий от TDrive

у перла все хорошо было с вебом. более, чем хорошо. пхп дал проще синтаксис

ergo ★★★
()
Ответ на: комментарий от TDrive

нет. Перл для Веба не работает с переводом каретки и требует строку в начале. Даже 2 строки.

PHP не требует ничего.

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

нет. Перл для Веба не работает с переводом каретки и требует строку в начале. Даже 2 строки.

не распарсил

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

Да. И права на Перл файл нужно выставлять дополнительно. Обычно - они не те.

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

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

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

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

Я вам больше скажу.
Они

ЖАЛКИЕ НИКЧЕМНЫЕ ЛЮДИШКИ и ничего не понимают в Perl! ...
anonymous
()
Ответ на: комментарий от anonymous

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

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

Потому как регулярки - это практически главное в сегодняшнем программировании

Не буду вам перечить, чтобы не обидеть!
В 1812 году, когда Perl часто использовал попался мне сайтик на котором собирали разные регулярки.
Штук пятьсот каких хошь было …

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

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

Хорошо что я не программист.

Но расскажите скорее, как например при помощи регулярок можно рассчитать фотолитографическую маску для выпуска процессора по 7нм технологии?

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

А у вас какое образование, шо такое деве по дете

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

Ой вэй… Боюсь что бы Вы смогли мне объяснить, Вам придется для начала понять что такое уравнения Максвелла;-)

В общем так толсто что даже тонко, респект!

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

До вступления Наполеона в Москву или после? - Ээто важно :-)

Уже не помню?
Помню побежал я, а затем

Огородами, огородами и к Котовскому! ...
anonymous
()
Ответ на: комментарий от anonymous

деве по дете кококое образование у вас

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

Потому как регулярки - это практически главное в сегодняшнем программировании.

Ты это сам придумал?

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

Роторы? В авиационном институте мы их хавали на завтрак. Только на аэродинамике, вроде. Вихри всякие. Ламинарный, турбулентный.

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

В авиационном институте роторы из алюминия, в кораблестроительном из стали. А в энергетическом какие?

кстати, ротор + орт = роторт или нет?

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

Интеграл по замкнутому контуру вектора электромагнитной индукции… - кайф какой. Молодость. Общага авиационного института.

Градиент есть вектор направленный в сторону наискорейшего возрастания функции и по модулю равный скорости её возрастания.

А вы Де ве по де те то хоть знаете?

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

Таки шо бы у деве стало хотя бы одно дете, деве должна перестать быть деве - если она не деве Мария. У нас это знает каждый поц.

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

///В авиационном институте роторы из алюминия, в кораблестроительном из стали.///

Упс. Ротор - это вы не про то совсем. Грусненько это.

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

Видите ли, если у Вас «регулярки - это главное что есть в современном программировании», то боюсь что даже алюминиевый ротор для Вас чересчур инновационен, хватит и деревянного.

Вот что делает с людьми вебня… как страшно жить;-(

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

Вот что делает с людьми вебня… как страшно жить;-(

Эээээээээ.
Вот что делает с людьми Perl … как страшно жить;-(

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

Ой, а Вы типа тут счетчик соскоков? Мьютексом то его хоть прикрыли?;-)

Я уже че то ржу в голос, астанавитесь! Хороший вышел тред.

Если всерьез, то по образования я физик, 20ть с лишним лет пишу числодробилки. В вебне не понимаю почти ничего.

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

у него образование регулярного института им. Шлакоблоконя. не то что у вас.

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

Если Вы хотите поговорить со мной за теорию поля, то скажите как в законах всемирного тяготения и кулона теорема Гаусса-Остроградского позволяет с высокой точностью определить что радиус стоит именно в квадрате.

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

Мы их хавали на завтрак - означает что на этих самых роторах были построены формулы для аэродинамики и пр. Физика, в авиационном институте, это начальная стадия, инструмент.

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

Роторы бывают очень разные, откуда же мне знать какой ротор имеет ввиду выпускник авиационного института у которого в программировании главное это регулярки и шлакоблокуни повсюду кружат… ?!

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

ты победил. а какое у тебя образование?

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

Ну дык я Вам задал вопрос по физике, Вы не ответили. Как там Ваш счетчик соскоков, дата рейсом не попортило?;-)

Что кстати роторы думают про правило площадей?

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

Разные… - начинаете понимать свой ляп и медленно съезжать? Хорошо. Что дальше выдумаете в своё оправдание? Что Ротор это не Физика, а Вышка?

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

«ротор сделаем из дерева» - это такой фольклер и баянистый баян для тех кто в теме. И то что Вы его не знаете, как и то что Вы не в состоянии ответить на простейшие вопросы по физике, как бы намекает что физики Вы и не знаете, да и не знали скорее всего - че бы там Вы на завтрак не потребляли… упс.

А как дысал!(с)

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

Блин. Вы и правда не знаете что Ротор - это и есть Физика? Точнее применение Вышки в Физике, в аэродинамике, и даже в уравнении Максвелла.

Мрак. Вы что закончили?

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

Пока что я вижу что Вы не умеете читать и понимать написанное, а так же не умеете парсить сарказм. Регулярочка сломалась?

И ротор это не физика, физика это наука о моделях окружающего мира, а ротор это всего лишь набла векторно на векторное поле или другими словами свертка тензора Леви-Чевиты с оператором Гамильтона. Это кусочек математики которая язык физики но никак не вся физика.

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

Физик не может не знать роторы

И дивергенции. Вы себе не представляете каких усилий мне сейчас стоит одним глазом за этим трэдом наблюдать, но не оторваться же ;) Жгите, давно так не смеялся…

bugfixer ★★★★★
()
Ответ на: комментарий от AntonI

На 2 листе «Физик» понял за Роторы.

Ещё немного и сможете постигнуть прелесть Регулярок и Перла - Но учтите что в Перл высокий порог вхождения. Некоторым Физикам его не преодолеть

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

прелесть Регулярок и Перла

Вот оно. Да! Регулярки и Перл! Прррелесть ;)

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

а как там регулярками то аэродинамику считают? На конформных неструктурированных сетках, RKDG какой нить?

Кстати, Вы два вопроса по физике (которую Вы типа на завтрак ели) уже слили вчистую.

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

Вот сразу ясно - человек в теме.

Если честно, в физике мне до @AntonI как до луны, веселюсь я просто, по мере возможности ;)

bugfixer ★★★★★
()
Ответ на: комментарий от AntonI

А я и не позиционирую себя как Физика.

Прочность. Динамика полёта. - Можно поговорить. Я - инженер космической техники - см. мой диплом.

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

Ох тыж Божечьки…

Мне есть с кем поговорить и о прочности и о динамике полета. Хоть космического, хоть атмосферного (до-, транс, сверх- и гиперзвукового, в т.ч. с т.з. аэроакустики). Я на ЛОр не за этим хожу.

Просто когда Вы пишете что «регулярки - это главное что есть в современном программировании», то у меня конечно же роторы становятся деревянными и просыпается острый приступ глумливости.

Простите пожалуйста, я не со зла;-(

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

Я существо темное, необразованное, университетов не заканчивал, один в семи комнатах не проживал, на перле не писал

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

один в семи комнатах не проживал,

Как проживающий один в пяти комнатах заявляю, это пздц. Уверен, что от увеличения комнат выигрыша точно не будет, возрастут лишь расходы на обслуживание.

Троллинг не засчитан.

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

Господа, вам не кажется, что этому чуду в перьях место на лурке рядом с @metaprog?

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