SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

魔方陣を作ろう

先日の大学入学共通テストで魔方陣のプログラム問題が出たので、魔方陣を自作するプログラムを作ってみました。

使い方

  • 実行すると、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行:斜め方向の合計数を計算・表示