LINUX.ORG.RU

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

 , , , ,


9

4

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

Задачка:

Необходимо для каждой пары слов получить новое слово, так, чтобы окончание первого совпадало с началом второго, например, шлакоблок + окунь = шлакоблокунь. Это слово надо вывести в стандартный поток вывода.Если слова возможно соединить несколькими способами, надо выбрать тот, что обеспечивает максимальную общую часть, например папа + папаха = папаха (а не папапаха). Необходимо написать последнее условие.

Я просто взял практически первое попавшаяся задание.

На Перле программа заняла 5 строк не считая ввода-вывода. С вводом-выводом - 7 строк.

А как у вас? На ваших Супер-пупер языках?

Перемещено xaizek из general

Перемещено hobbit из talks



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

///У нас УКНЦ были. :)

Не очень смешно. Знаете, на чём мы программировали численные методы матана в универе? Даже не на «Спектрумах» (была одна лаборатория) на Бейсике, а на «Электронике МК-61».

Это было настолько «удобно», что иногда я выполнял задание на бумажке с помощью подаренного мне на поступление в 9 класс (тогда ещё была 10-летка)«Электроника МК 71».

P.S. Численные методы на Бейсике… На Бейсике… Голова –>> стена, много раз.

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

А причина то в чём? В том что С++ компилятор давно не обновлялся? Застыл в 90-х? Быкует на регулярки?

Мало того, регулярки в С++ недоделанные. В частности нет заглядывания вперёд.

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

Весь диплом был: Расчёт ракеты 5 тонн на 150км. Прочностной расчёт это только часть. 500 листов А4 расчёты. 16 листов А1 - чертежи.

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

Но мою прогу никто не заценил - некому было заценить. Препады наши секли только в программируемых калькуляторах. Комп стоил 2000 баксов. У меня была приставка к телевизору. Там был бейсик и подключение для магнитофона.

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

Но мою прогу никто не заценил - некому было заценить. Препады наши секли только в программируемых калькуляторах. Комп стоил 2000 баксов. У меня была приставка к телевизору. Там был бейсик и подключение для магнитофона…, 2 летний ребёнок, съёмное жильё и отсутствие прописки

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

Хотя бы потому, что вопросы типизации на данном уровне развития - не должны беспокоить программиста.

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

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

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

Как показал тред, я не думаю, я исхожу из цифр, как бы это странно не звучало)

Есть медленный Перл и быстрый C++:
https://blog.famzah.net/2016/09/10/cpp-vs-python-vs-php-vs-java-vs-others-performance-benchmark-2016-q3/

А есть медленный regex_replace в С++ и для этого кейса быстрый Perl, не более.

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

Увидел регулярки - тут же написал бота в чат. Он выскакивал и говорил за Леночку:

  • Привет, <НИК>, ты меня любишь?
  • ……Ответ Юзера…….
  • А какие подарки ты мне будешь дарить?

Некоторые Юзеры потом полчаса уже успокоится не могли

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

Есть же специальные метасимволы, чтоб понятней написать можно было! Конечно ваша и моя регулярка не эквивалентны, тем не менее:

#!/usr/bin/env perl

open my $in,  '<:encoding(UTF-8)', './vxod.txt';
open my $out, '>:encoding(UTF-8)', './vyxod.txt';

while ( <$in>) {
    print $out s/( \w* ) \K \W+ \1 //xr;
}
Алсо, если маслаете гору текста, нужно осторожно группировки использовать ($1,$2 и т.п.) и подумать за структуру самой регулярки, чтоб оно шустрее работало. Моя должна быть прилично быстрей и ИМХО сильно понятней.

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

Входной файл

https://dropmefiles.com/z7VlC

perl5_guy

#!/usr/bin/env perl

open my $in,  '<:encoding(UTF-8)', './vxod.txt';
open my $out, '>:encoding(UTF-8)', './vyxod.txt';
$t = time();
while ( <$in>) {
    print $out s/( \w* ) \K \W+ \1 //xr;
}
$t2 = time()-$t;
print "Perform time: $t2 seconds\n"
kompospec
#!/usr/bin/perl

open D, 'vxod.txt';
open V, '>vyxod.txt';

$t = time();
while (<D>) {
  s/([^+\s]*?)([^+\s]*)[\s+]+\2/$1$2/;
  print V;
  }
$t2 = time()-$t;
print "Perform time: $t2 seconds\n"

Perl, perl5_guy - Perform time: 11 seconds

Perl, kompospec - Perform time: 17 seconds

kompospec, тебя только что публично продоминировали

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

а на «Электронике МК-61»

Ваша майка однозначно грязнее! У меня МК-90 был, я на нем даже графики строил. Была история с одним графиком где он порвал комп как тузик грелку. Сама история. Одинаковый вариант задания, одногрупник с таким же вариантом курсача построил график дома на компе, а я как правильный долбодядел доделывал в последний день уже в институте и график построил на МК-ке. Так вот на ней, благодаря её экрану, разрыв функции был оооочень даже заметен :) А одногрупник перерисовал с экрана компа не увидев этого момента. :)

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

///благодаря её экрану, разрыв функции был оооочень даже заметен

Чем функция задавалась? Если не диф/интегральным уравнением, то наличие разрыва видно без всякого графика.

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

Проверил вашу регулярку. Она медленней в 2 раза:

#!/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) {&resh4 ()}
  
M1:  
  }

sub resh4 {
  
    if($v ne $v2) {
    $_ = "$v $v2";
    /( \w* ) \K \W+ \1/x;
    
    if ($1 and ($1 ne $v2) and ($1 ne $v)){
    $sov = length $1;
    if ($sov>$sov1){$sov1=$sov; $str="$1 - $_"}

}
  }
  
  
  }


  
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 - $_"}

}
  }
  
  
  }

sub resh {

  $str = $_;
  
  }


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

Плюсовики выносят регулярку из цикла. В Перле это надо? Возможно?

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

Я написал что проверил вашу РЕГУЛЯРКУ - регулярку

Что не так?

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

Значит ошибку нужно сюда запостить. Для любого программиста это должно быть очевидно. Если s///r не работает - значит Perl очень старый. Данный флаг поддерживается с версии 5.14, которая вышла в 2011 году.

Алсо, для сравнения нескольких вариантов Perl’ового кода есть модуль Benchmark, который идёт с интерпретатором (perldoc Benchmark)

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

Что мне постить? Если я запостил, готовую работающею на вашей регулярке программу.

Что я ещё должен сделать? Ни буду больше с вами общаться.

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

Я вас не понимаю. Вот вывод:

100 прошло 2 секунд. 5 атель - авансодатель ателье
200 прошло 4 секунд. 7 биограф - автобиограф биография
300 прошло 6 секунд. 7 биограф - автобиограф биография
400 прошло 8 секунд. 7 биограф - автобиограф биография
500 прошло 9 секунд. 7 биограф - автобиограф биография
600 прошло 11 секунд. 7 биограф - автобиограф биография
700 прошло 13 секунд. 7 биограф - автобиограф биография
800 прошло 14 секунд. 7 биограф - автобиограф биография
900 прошло 16 секунд. 7 биограф - автобиограф биография
1000 прошло 18 секунд. 7 биограф - автобиограф биография
1100 прошло 19 секунд. 7 биограф - автобиограф биография
1200 прошло 21 секунд. 7 биограф - автобиограф биография
1300 прошло 23 секунд. 7 биограф - автобиограф биография
1400 прошло 24 секунд. 7 биограф - автобиограф биография
1500 прошло 26 секунд. 7 биограф - автобиограф биография
1600 прошло 27 секунд. 7 биограф - автобиограф биография
1700 прошло 29 секунд. 7 биограф - автобиограф биография
1800 прошло 30 секунд. 7 биограф - автобиограф биография
1900 прошло 32 секунд. 7 биограф - автобиограф биография
2000 прошло 33 секунд. 7 биограф - автобиограф биография
2100 прошло 36 секунд. 7 биограф - автобиограф биография
2200 прошло 37 секунд. 7 биограф - автобиограф биография
2300 прошло 39 секунд. 7 биограф - автобиограф биография
2400 прошло 41 секунд. 7 биограф - автобиограф биография
2500 прошло 43 секунд. 7 биограф - автобиограф биография
2600 прошло 45 секунд. 7 биограф - автобиограф биография
2700 прошло 47 секунд. 7 биограф - автобиограф биография
2800 прошло 48 секунд. 7 биограф - автобиограф биография
2900 прошло 50 секунд. 7 биограф - автобиограф биография
3000 прошло 51 секунд. 7 биограф - автобиограф биография


------------------
(program exited with code: 0)
Press return to continue

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

Не трогай Perl. Я тебя Христом Богом прошу. Пиши на каком-нибудь другом языке. Python попробуй. Очень хороший язык говорят.

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

на python тоже можно такого накрутить - что все охренеют: какой тупиз

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

не нужно запускать 2 подпрограммы. Не нужно! Зачем вам это?

Я работаю в редакторе. Меняю цифру в редакторе - и на кнопку запуска программы. Меняю на другую - и опять на кнопку запуска.

быстро. Удобно. Всё сразу видно.

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

В вашем случае? В вашей программе - Запросто может быть.

Вы сомневаетесь в моей программе? Прогоните и посмотрите.

for $v2 (@d2) {&resh4 ()}

менять от 2 до 4

kompospec
() автор топика
Последнее исправление: kompospec (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.