Для домашнего проекта поставил себе задачку: по форматной строке вида "Я [сразу|немедленно] [пошёл|поехал|пополз|попёрся] разбираться с [делами|братками]." сгенерировать полный список всех возможных вариантов такой строки. Посидел с карандашиком минут 20, наваял примерно такой код:
(
Много загогулин )
Comments 17
http://community.livejournal.com/code_wtf/73670.html
Reply
Reply
Reply
Reply
Reply
накатал на бумажке ;-) на ассмеблере пару листов....
при загнании в комп - на удивление все заработало.
че писал уже непомню.... но листинг был по длине достойный ;-)
Reply
Reply
#!/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
Reply
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
Всегда знал, что нет предела перловому совершенству!
Reply
Leave a comment