新しく発言する  EXIT  インデックスへ

パズル「数独」(ヒントつきプレイモード)


  パズル「数独」(ヒントつきプレイモード) 山中和義 2008/05/09 19:06:15  (修正1回)
  つづき 山中和義 2008/05/09 19:07:12  (修正1回)
Re: パズル「数独」(ヒントつきプレイモード)  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/05/09 19:07:12 ** この記事は1回修正されてます
つづき


!解法1:マスに入る「数字の候補」に着目する
FOR x=1 TO 9 !未確定のマスに対して
FOR y=1 TO 9
IF m(y,x)=0 THEN

LET t$=num$(x,y) !候補を求める

LET c=9 !その個数
FOR i=1 TO 9
IF t$(i:i)=" " THEN LET c=c-1 ELSE LET k=i
NEXT i
IF c>0 THEN !※列、行、ブロックで1つの場合は、確定可能である
IF c=1 THEN CALL box(x,y,k) !そのマスを示す

SET TEXT COLOR 4 !候補を3x3表示する
SET TEXT HEIGHT 0.25
FOR i=1 TO 3
FOR j=1 TO 3
LET k=i+(j-1)*3
PLOT TEXT ,AT x+i*0.3-0.1,y+j*0.3-0.1: t$(k:k)
NEXT j
NEXT i
ELSE
CALL box(x,y,1) !エラー「候補がありません。」
END IF

!PRINT y;x;t$;c !debug

END IF
NEXT y
NEXT x


!確定の「数」(初期値/入力値)の表示
FOR x=1 TO 9
FOR y=1 TO 9
LET k=m(y,x)
IF k<>0 THEN
IF k>0 THEN LET c=1 ELSE LET c=2 ! !黒/青
CALL putc(x,y,c,ABS(k))
END IF
NEXT y
NEXT x


!盤の表示
SET LINE COLOR 1 !黒
FOR x=1 TO 10 !縦線
IF MOD(x,3)=1 THEN SET LINE width 3 ELSE SET LINE width 1
PLOT LINES: x,1; x,10
NEXT x
FOR y=1 TO 10 !横線
IF MOD(y,3)=1 THEN SET LINE width 3 ELSE SET LINE width 1
PLOT LINES: 1,y; 10,y
NEXT y

SET DRAW mode explicit !ちらつき防止の終了
  │└つづき 山中和義 2008/05/09 19:08:40  (修正1回)
  │ └つづき 山中和義 2008/05/11 20:53:30 
  !9×9数独をプログラムで解く 山中和義 2008/05/12 13:57:38  (修正1回)
   └数独を解く!数独ソルバー 片山博文MZ 2008/08/04 13:11:52 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。