数独 初級 攻略 プログラム 番外
久しぶりです。
多面体関連の内容で 今はお伝えするほどのエピソードはありません。
そこで やっと出来た BASIC プログラムを載せておきます。
以前 Excel で作ったこともある 簡単なロジックで作っています。
仮定を設けての推論はせず 論理的必然としての 結果を表示します。
Excel では IF文が錯綜し 頭が混乱しました。
! 数独 初級 攻略 ツール ! フリーウエアー 十進BASIC でプログラム ! http://hp.vector.co.jp/authors/VA008683/ を参照 ! http://hp.vector.co.jp/authors/VA008683/english/index.htm 英語版 OPTION BASE 0 DIM x001(9,10) ! 集計用配列 DIM s001(9,9) ! 問題データ格納 DIM s002(9,9) ! 判定用数値格納 DIM s003(9,9) ! 累積判定用数値格納 ! 集計振り分け用データ取り込み FOR x=1 TO 9 FOR y=1 TO 9 READ x001(x,y) NEXT y NEXT x ! 集計振り分け用データ DATA 1,1,1, 2,2,2, 3,3,3 DATA 1,1,1, 2,2,2, 3,3,3 DATA 1,1,1, 2,2,2, 3,3,3 DATA 4,4,4, 5,5,5, 6,6,6 DATA 4,4,4, 5,5,5, 6,6,6 DATA 4,4,4, 5,5,5, 6,6,6 DATA 7,7,7, 8,8,8, 9,9,9 DATA 7,7,7, 8,8,8, 9,9,9 DATA 7,7,7, 8,8,8, 9,9,9 ! 問題データ取り込み と 集計データ格納 FOR x=1 TO 9 FOR y=1 TO 9 READ w001 IF w001 = 0 THEN LET s002(x,y)=0 IF w001 > 0 THEN LET s002(x,y)=10^(w001-1) LET s001(x,y)=w001 LET x001(x,0)=x001(x,0)+s002(x,y) LET x001(0,y)=x001(0,y)+s002(x,y) LET w002=x001(x,y) LET x001(w002,10)=x001(w002,10)+s002(x,y) NEXT y NEXT x PRINT ! 1行スぺースを空ける ! 問題内容を 視覚化 FOR x=1 TO 9 FOR y=1 TO 9 IF s001(x,y)=0 THEN PRINT "□ "; ELSE PRINT s001(x,y); END if IF y=3 OR y=6 THEN PRINT " "; IF y=9 THEN PRINT NEXT y IF x=3 OR x=6 THEN PRINT NEXT x ! 個々の位置に判定数値を格納 FOR x=1 TO 9 FOR y=1 TO 9 LET w001=x001(x,y) IF s002(x,y) = 0 THEN LET s003(x,y)=x001(x,0)+x001(0,y)+x001(w001,10) END if NEXT y NEXT x PRINT ! 1行スぺースを空ける ! 個々の判定数値を表示 FOR x=1 TO 9 FOR y=1 TO 9 IF s003(x,y) = 0 THEN PRINT "[ ";s001(x,y);" ]";" "; ELSE LET w006$="" LET w004$= STR$(s003(x,y)+10^9) FOR z=1 TO 9 LET zz=10-z LET w005$=mid$(w004$,z+1,1) IF w005$="0" THEN LET w006$=w006$ & STR$(zz) ELSE LET w006$=w006$ & " " END if NEXT z PRINT w006$;" "; END IF IF y=3 OR y=6 THEN PRINT " "; IF y=9 THEN PRINT NEXT y IF x=3 OR x=6 THEN PRINT NEXT x ! 問題データ ! a b c d e f g h i DATA 0,0,0, 0,0,7, 0,8,0 ! 1 DATA 0,0,0, 0,0,0, 0,2,3 ! 2 DATA 1,6,4, 0,0,0, 0,0,0 ! 3 DATA 2,0,7, 1,8,6, 0,0,0 ! 4 DATA 0,8,1, 9,5,0, 0,7,0 ! 5 DATA 9,4,5, 0,0,3, 0,0,6 ! 6 DATA 4,1,2, 0,6,0, 7,0,8 ! 7 DATA 0,0,6, 4,0,9, 2,3,1 ! 8 DATA 3,7,9, 2,0,8, 4,0,5 ! 9 END以上です。下のような出力になります。
□ □ □ □ □ 7 □ 8 □ □ □ □ □ □ □ □ 2 3 1 6 4 □ □ □ □ □ □ 2 □ 7 1 8 6 □ □ □ □ 8 1 9 5 □ □ 7 □ 9 4 5 □ □ 3 □ □ 6 4 1 2 □ 6 □ 7 □ 8 □ □ 6 4 □ 9 2 3 1 3 7 9 2 □ 8 4 □ 5 5 9 5 32 3 65 3 9 4321 [ 7 ] 9 65 1 [ 8 ] 9 4 87 5 9 5 8 8 65 9 4 1 54 1 9 65 1 [ 2 ] [ 3 ] [ 1 ] [ 6 ] [ 4 ] 8 5 3 9 32 5 2 9 5 9 5 9 7 [ 2 ] 3 [ 7 ] [ 1 ] [ 8 ] [ 6 ] 9 5 3 9 54 9 4 6 [ 8 ] [ 1 ] [ 9 ] [ 5 ] 4 2 3 [ 7 ] 4 2 [ 9 ] [ 4 ] [ 5 ] 7 7 2 [ 3 ] 8 1 1 [ 6 ] [ 4 ] [ 1 ] [ 2 ] 5 3 [ 6 ] 5 [ 7 ] 9 [ 8 ] 8 5 5 [ 6 ] [ 4 ] 7 [ 9 ] [ 2 ] [ 3 ] [ 1 ] [ 3 ] [ 7 ] [ 9 ] [ 2 ] 1 [ 8 ] [ 4 ] 6 [ 5 ]
2015年4月19日