ある意味、露出狂です。
ふと思い立ち、三方陣を解くプログラムを書きました。所要時間はデバグ含めて15分ほど。デバグが10分くらいかかりました。
use strict; use utf8; my @q = ( [-1,-1,-1], [-1, 5,-1], [-1, 3, 8], ); # 正解か判定 sub check($){ my $ref_data = shift; my $num = $ref_data->[0][0] + $ref_data->[0][1] + $ref_data->[0][2]; foreach(0 .. 2){ return 0 if($num != $ref_data->[$_][0] + $ref_data->[$_][1] + $ref_data->[$_][2]); } foreach(0 .. 2){ return 0 if($num != $ref_data->[0][$_] + $ref_data->[1][$_] + $ref_data->[2][$_]); } return 0 if($num != $ref_data->[0][0] + $ref_data->[1][1] + $ref_data->[2][2]); return 0 if($num != $ref_data->[0][2] + $ref_data->[1][1] + $ref_data->[2][0]); return 1; } # 乱数で答えを作る sub randarr(){ my @nums = (1 .. 9); foreach my $m(0 .. $#nums){ my $n = int(rand() * @nums); my $tmp = $nums[$n]; $nums[$n] = $nums[$m]; $nums[$m] = $tmp; } return @nums; } #表示 sub disp($){ my $ref = shift; print join(",", @{$ref->[0]}), "\n"; print join(",", @{$ref->[1]}), "\n"; print join(",", @{$ref->[2]}), "\n"; print "\n"; } disp(\@q); # どこを答えればいいの? my @emp = (); foreach my $x(0 .. 2){ foreach my $y (0 .. 2){ push(@emp, [$x, $y]) if($q[$x][$y] < 0); } } # 100万回チャレンジ foreach(0 .. 1000000){ my @r = randarr(); foreach(@emp){ $q[$_->[0]][$_->[1]] = shift @r; } if(check(\@q)){ disp(\@q); exit; } } die "ギブアップです";
速さ重視して書くと、素の実力が出ますねー。普段なら絶対書かないコードのできあがりです( ´△`)。とりあえず反省。
- 配列を3x3固定のものとしてコーディングするなんて屑のやること
- 乱数アタックじゃなくてせめて総当たりにしようよ
- そもそも、三方陣って答え一個ですから・・・