極悪です。
前回の自分の出題の延長と考えて、総当たりで解いてます。
Naomasa Numajiri さんの [TSabc:150] 言語の比較の参考4(電車の切符で昔やりました) から
># * 「×、÷」が「+、−」より優先されていない。
あるものは使おうってことで、eval で(最後に評価で)済ませま
した。
># * 4つの数値が与えられた時の順番を維持したまま計算してい
># る。
変えてもいいけど、結局総当たりしか思いつかないので省略。
--^ 計算手順
8+4+2+1 = (8 4 2 1) x (+ + +)
8+4+2-1 = (8 4 2 1) x (+ + -)
8+4+2*1 = (8 4 2 1) x (+ + *)
8+4+2/1 = (8 4 2 1) x (+ + /)
8+4-2+1 = (8 4 2 1) x (+ - +)
8+4-2-1 = (8 4 2 1) x (+ - -)
8+4-2*1 = (8 4 2 1) x (+ - *)
8+4-2/1 = (8 4 2 1) x (+ - /)
8+4*2+1 = (8 4 2 1) x (+ * +)
8+4*2-1 = (8 4 2 1) x (+ * -)
8+4*2*1 = (8 4 2 1) x (+ * *)
8+4*2/1 = (8 4 2 1) x (+ * /)
以下省略
--$
--^ ticket.pl
my @OPRND = qw(8 4 2 1);
my @OPCD = qw(+ - * /);
my $TARGET = 10;
sub prod{
my($last,$next,@oprnd) = @_;
if($next){
prod($last.$_.$next,@oprnd) foreach(@OPCD);
}else{
my $result = eval $last;
print "$last = $result\n" if $result == $TARGET;
}
}
prod(@OPRND);
--$
--^ 実行結果
%perl ticket.pl
8+4-2*1 = 10
8+4-2/1 = 10
8+4/2*1 = 10
8+4/2/1 = 10
%
--$
--
FZH01112@..., http://www1.u-netsurf.ne.jp/~dune/