先日の大学入学共通テストで魔方陣のプログラム問題が出たので、魔方陣を自作するプログラムを作ってみました。
使い方
- 実行すると、0が9個入った表が表示されます。表の周りの数字は、縦・横・斜めの列の合計数です。
- 点滅するカーソルを上下左右の矢印キーで移動して、1~9の数字キーを押して数字を入れてください。周囲の合計数もそれに応じて変化します。なお1~9の数字は1個ずつしか使えないので、既に表にある数字を押しても入力できません。0を入力するとそのセルの数字をクリアできます。
- 1~9の数字を1個ずつ使って、縦・横・斜めの合計数が全て同じになるように、魔方陣を作ってください。完成するとプログラムが終了します。
数字を入力すると合計数がパカパカ変わる様子が面白いです。
でも答えを見ないで魔方陣を作るのはかなり難しい…
プログラム
魔方陣の表示、合計数の計算、完成チェックのプログラムは、共通テストの問題の参考になると思います。
1kバイトぎりぎりです。
10 '*MAGIC CIRCLE 20 CLV:VIDEO 3 30 GSB260 40 E=0 50 FOR N=1 TO 9 60 IF [10+N]=0 E=1 70 NEXT 80 C=[20] 90 FOR N=21 TO 27 100 IF C!=[N] E=1 110 NEXT 120 IF E=0 LC 0,9:?"COMPLETE!":END 130 LC U*3+2,V*2+2,1 140 K=INKEY():IF !K CONT 150 U=U-(K=28)*(U>0)+(K=29)*(U<2) 160 V=V-(K=30)*(V>0)+(K=31)*(V<2) 170 IF K<48 OR K>57 GOTO 130 180 N=K-48 190 IF [10+N]>0 GOTO 30 200 LC U*3+2,V*2+2:?N 210 M=[U+V*3] 220 [10+M]=0 230 [U+V*3]=N 240 IF N>0 [10+N]=1 250 GOTO 30 260 CLS:? 270 FOR I=0 TO 2 280 ?"+--+--+--+" 290 ?"| | | |" 300 NEXT 310 ?"+--+--+--+" 320 FOR Y=0 TO 2 330 FOR X=0 TO 2 340 LC X*3+2,Y*2+2:?[X+Y*3] 350 NEXT 360 NEXT 370 FOR Y=0 TO 2 380 [20+Y]=0 390 FOR X=0 TO 2 400 [20+Y]=[20+Y]+[X+Y*3] 410 NEXT 420 LC 10,Y*2+2:?DEC$([20+Y],2) 430 NEXT 440 FOR X=0 TO 2 450 [23+X]=0 460 FOR Y=0 TO 2 470 [23+X]=[23+X]+[X+Y*3] 480 NEXT 490 LC X*3+1,8:?DEC$([23+X],2) 500 NEXT 510 [26]=0:[27]=0 520 FOR Z=0 TO 2 530 [26]=[26]+[Z+Z*3] 540 [27]=[27]+[2-Z+Z*3] 550 NEXT 560 LC 10,8:?DEC$([26],2) 570 LC 10,0:?DEC$([27],2) 580 RTN
- 10~250行:メインプログラム
- 40~70行:1~9の数字を1個ずつ使っているか?チェック
- 80~110行:合計数が全て同じになっているか?チェック
- 120行:エラーがなければ魔方陣完成で終了
- 130行:カーソル表示
- 140~160行:カーソル移動
- 170~240行:数字入力の処理
- 260~580行:表の表示サブルーチン
- 260~310行:枠線表示
- 320~360行:3×3の数字を表示
- 370~430行:横方向の合計数を計算・表示
- 440~500行:縦方向の合計数を計算・表示
- 510~570行:斜め方向の合計数を計算・表示