Perl6で「ソフトウェアエンジニアならば1時間以内に解けなければいけない5つの問題」の5問目を解いてみた
http://qiita.com/tag1216/items/25ff0f957340c54ae73c
Perl6 だと eval が EVAL になってるのと、文字列結合演算子が ~ になっているのと実行が異常に遅いこと以外は違いはない。
calc(1, 1);
sub calc {
my ($b, $n) = @_;
if ($n==9) {
say $b if EVAL($b) == 100;
} else {
for ('+', '-', '') {
calc($b ~ $_ ~ ($n+1), $n+1);
}
}
}
Perl5 なら以下のように極めてわかりやすく記述することが可能。
my $x = 1;
for ('+', '-', '') {
my $x = $x . $_ . 2;
for ('+', '-', '') {
my $x = $x . $_ . 3;
for ('+', '-', '') {
my $x = $x . $_ . 4;
for ('+', '-', '') {
my $x = $x . $_ . 5;
for ('+', '-', '') {
my $x = $x . $_ . 6;
for ('+', '-', '') {
my $x = $x . $_ . 7;
for ('+', '-', '') {
my $x = $x . $_ . 8;
for ('+', '-', '') {
my $x = $x . $_ . 9;
say $x if eval($x)==100;
}
}
}
}
}
}
}
}
題意のままに!!! 直接的な!!! 表現をしている!!!
ダイナミックスコープ最高!!!!!