つづき
DEF ToBlock(x)=INT((x-1)/3)*3 !マスに換算する
FUNCTION num$(x,y) !マスに入る候補を求める LET t$="123456789" !使用可能な数字 FOR yy=1 TO 9 !列(縦)に着目 LET k=ABS(m(yy,x)) IF k>0 THEN LET t$(k:k)=" " !使用済みの数を削除する NEXT yy FOR xx=1 TO 9 !行(横)に着目 LET k=ABS(m(y,xx)) IF k>0 THEN LET t$(k:k)=" " NEXT xx LET Bx=ToBlock(x) !ブロックに着目 LET By=ToBlock(y) FOR xx=1 TO 3 FOR yy=1 TO 3 LET k=ABS(m(By+yy,Bx+xx)) IF k>0 THEN LET t$(k:k)=" " NEXT yy NEXT xx LET num$=t$ !残った数が候補となる END FUNCTION
10 DATA 0,0,4, 0,0,0, 0,5,0 !初期データ DATA 0,0,8, 0,0,0, 2,0,9 DATA 0,0,3, 0,0,4, 0,0,0 DATA 0,0,0, 0,2,0, 3,8,7 DATA 0,0,0, 5,0,7, 0,0,0 DATA 7,4,6, 0,3,0, 0,0,0 DATA 0,0,0, 2,0,0, 4,0,0 DATA 3,0,7, 0,0,0, 9,0,0 DATA 0,9,0, 0,0,0, 5,0,0 99 DATA 9,1,4, 6,8,2, 7,5,3 !解答データ ※参考 DATA 5,6,8, 3,7,1, 2,4,9 DATA 2,7,3, 9,5,4, 8,1,6 DATA 1,5,9, 4,2,6, 3,8,7 DATA 8,3,2, 5,1,7, 6,9,4 DATA 7,4,6, 8,3,9, 1,2,5 DATA 6,8,5, 2,9,3, 4,7,1 DATA 3,2,7, 1,4,5, 9,6,8 DATA 4,9,1, 7,6,8, 5,3,2 END
|