小町算解析プログラム

このスレ見て思い立った。


123456789+-*/()使って自分のレス番号を表せ
http://science4.2ch.net/test/read.cgi/math/1153608616/

演習1

1〜9の数字を順に使って
任意の数値になる式を探そう、というプログラムを作ろう。

作りかけの上なんかコードきたないけど、とりあえず動作OK。

拡張予定。

  • 1.括弧を使えるようにしたい
  • 2.結果順にソート
  • 3.非整数を除外

2,3は簡単。2は実行時間凄そうだけど、先に非整数を抜いてからソートすればマシかな。
1はなんか面倒だなあ・・・しかも実行時間が半端じゃない・・・と思う。

(x*y)+zみたいな不要な括弧を除外するのはかなりハードなのであきらめよう。

<?php

$enzansi=" +-*/";

$kigou[0]=1;
for($i=1;$i<=9;$i++) {
	$kigou[$i]=0;
}


while($kigou[0]<3) {
	$var=$enzansi[$kigou[0]];
	for($i=1;$i<=9;$i++) {
		$var.=$i;
		if ($kigou[$i]>0) {
			$var.=$enzansi[$kigou[$i]];
		}
	}
	eval('$result=' . $var . ';');
	echo "$var : $result\n";
	$kigou[8]++;
	for ($i=8;$i>=1;$i--) {
		if ($kigou[$i]==5) {
			$kigou[$i-1]++;
			$kigou[$i]=0;
		}
	}
}

?>

結果のごく一部抜粋

+123*4+56-7-8-9 : 524
+123*4+56-7-8*9 : 469
+123*4+56-7-8/9 : 540.111111111
+123*4+56-7*89 : -75
+123*4+56-7*8+9 : 501
+123*4+56-7*8-9 : 483
+123*4+56-7*8*9 : 44