задачка на перестановки
Mar. 21st, 2007 12:27 pm"по форматной строке вида "Я [сразу|немедленно] [пошёл|поехал|пополз|попёрся] разбираться с [делами|братками]." сгенерировать полный список всех возможных вариантов такой строки"
my @ary = map { m#\[(.+?)\]# ? [ split "\\|",$1 ] : $_ } split "\\s+",$ARGV[0];
print join "\n",map { join " ",@$_ } shuffle (@ary);
exit;
sub shuffle (@) {
my $word = shift or return;
my @ary;
foreach my $w (ref $word eq "ARRAY" ? @$word : $word) {
foreach my $s (@_ ? shuffle (@_) : undef) {
push @ary,[ $w,defined ($s) && @$s ];
}
}
return @ary;
}