2021-01-04
世界中で人気のパズル「数独 / Sudoku」を、コンピューターに解かせてみよう!

1. まずは解き方を考える。縦と横と3x3のボックス内に1から9がひとつだけ。調べて候補を絞り込んで、確定させて繰り返す?
2. プログラムする。少しずつ組んで、確認、デバッグを繰り返す。

まずは画面に表示するところから!

1 VIDEO3:CLS 10 ?" 4 6 " 20 ?"43 8 2 " 30 ?" 6 5 3" 40 ?" 2 3 " 50 ?"5 1 7" 60 ?" 1 4 " 70 ?"1 2 5 " 80 ?" 7 9 18" 90 ?" 8 4 " 100 FORI=0TO80:[I]=#3FF:N=SCR(I%9,I/9):IFN!=32[I]=1<<(N-48) 110 NEXT 115 FORK=0TO2 120 FORI=0TO8:N=0:FORJ=0TO8:GSB300:IF[M]&1=0N=N|[M] 130 NEXT 140 FORJ=0TO8:GSB300:IF[M]&1[M]=[M]&~N 150 NEXT:NEXT:NEXT 160 FORK=0TO2:FORI=0TO8:FORJ=0TO8:GSB300 162 Z=[M]:IFZ&1=0GOTO170 164 N=0:X=0:FORL=1TO9:IFZ&(1<<L)N=N+1:X=L 166 NEXT 168 IFN=1[M]=1<<X:GSB350 170 NEXT:NEXT:NEXT 180 FORK=0TO2:FORI=0TO8:FORL=1TO9:N=0:X=0:FORJ=0TO8:GSB300 182 IF[M]&(1<<L)N=N+1:X=J 186 NEXT 188 IFN=1J=X:GSB300:IF[M]!=1<<L[M]=1<<L:X=L:GSB350 190 NEXT:NEXT:NEXT 200 F=0:FORI=0TO81:IF[I]&1=1F=1 210 NEXT 230 IFFGOTO115ELSELC0,10:?"SOLVED! ";:END 300 IFK=0M=I+J*9:RTN 310 IFK=1M=I*9+J:RTN 320 M=I/3*3+J%3+(I%3*3+J/3)*9:RTN 350 BEEP:LCM%9,M/9:?X:LC0,10:?"HIT";X,M%9;",";M/9:RTN


がんばって解いてます!


解けました!

IchigoJam実機で動かせばもっと速いはず。IchigoJam Rで10倍速!?

途中で止めて、再度動かすには、下記の表示プログラムを追記して

500 CLS:FORI=0TO81:Z=[I]:IFZ&1=1NEXT 510 LCI%9,I/9:FORJ=1TO9:IFZ&(1<<J)?J 520 NEXT:NEXT:RTN

途中からスタート!

GSB500:GOTO115

簡単そうな2問しか解いていないので、解けない問題があるかも。
解けなければ、手順1に戻って、人間ならどう解くか考えて、プログラムを追加すればいいだけですね!
高速化の余地も大いにあります。最速チャレンジするのも楽しいかも?

お母さんお父さんが悩んでいたら、プログラムで助けてあげるのもいいですね!

PCNこどもプロコン2021
締め切りは、1/7、楽しい作品の応募、お待ちしてます!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS