Перловые экзерсисы

Mar 21, 2007 10:43


Для домашнего проекта поставил себе задачку: по форматной строке вида "Я [сразу|немедленно] [пошёл|поехал|пополз|попёрся] разбираться с [делами|братками]." сгенерировать полный список всех возможных вариантов такой строки. Посидел с карандашиком минут 20, наваял примерно такой код:
Много загогулин )

perl, coding

Leave a comment

Comments 17


greshnik March 21 2007, 09:39:51 UTC
Ну, алгоритм подбора всех возможных перестановок - не бином ньютона. Так что неудивительно, что заработало.

Reply

larubin March 21 2007, 10:24:22 UTC
Т.е. бином Ньютона не заработал бы? ;)

Reply

greshnik March 21 2007, 21:41:01 UTC
Заработал бы. Но не сразу %)

Reply

recoder March 21 2007, 10:28:34 UTC
Не... Я уже вышел из возраста, когда бросаются писать то, что уже давно написано.

Reply


russuv March 21 2007, 10:52:04 UTC
помню дет так с десять назад, лежал в больнице и за неимение компа......
накатал на бумажке ;-) на ассмеблере пару листов....
при загнании в комп - на удивление все заработало.
че писал уже непомню.... но листинг был по длине достойный ;-)

Reply

recoder March 21 2007, 11:02:06 UTC
О, я тоже пока лежал в больнице, в тетрадке сделал редизайн своего хомяка, а потом только нарисовал картинки и вбил html и скрипты...

Reply


цветной код jerom March 21 2007, 12:13:46 UTC


#!/usr/bin/perl -l

$pattern = "Я [сразу|немедленно] [пошёл|поехал|пополз|попёрся] разбираться с [делами|братками].";

print "$_" for(@{mutate($pattern)});

sub mutate {
my (@m, $s, $w);

while($s = pop@_) {
if($s =~ /\[(.*?)\]/) {

for$w(split '\|',$1) {
$_ = $s;

s/\[(.*?)\]/$w/;
push @_,$_;

}
} else {
push @m, $s;

}
}
return \@m;
}

Reply

Re: цветной код larubin March 22 2007, 09:05:55 UTC
Что скажешь, recoder?

Reply

меня уже поправили (с pre) jerom March 22 2007, 09:11:24 UTC
мне уже сказали, что надо быть проще и писать так:

sub mutate {
my (@m, $s, $w);
while($s = pop@_) {
if($s =~ /\[(.*?)\]/) {
push @_, map { ($w = $s) =~ s/\[.*?\]/$_/; $w } split '\|', $1;
} else {
push @m, $s;
}
}
return \@m;
}

Reply

Re: меня уже поправили (с pre) recoder March 22 2007, 09:14:58 UTC
Супер!
Всегда знал, что нет предела перловому совершенству!

Reply


Leave a comment

Up