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

箱入り娘をプログラムで解く


  箱入り娘をプログラムで解く 山中和義 2008/06/15 19:17:14 
  つづき 山中和義 2008/06/15 19:18:29 
   └つづき 山中和義 2008/06/15 19:21:16 
    └つづき 山中和義 2008/06/15 19:21:54 
Re: つづき  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/06/15 19:21:54
つづき

!IF row>0 THEN !上端以外なら、上
! IF b$(k-N:k+1-N)="00" THEN
! LET xn=xn+1
! LET x$(xn)=b$
! LET x$(xn)(k-N:k+1-N)=b$(k:k+1)
! LET x$(xn)(k+N:k+1+N)="00"
! END IF
!END IF
IF col<>1 THEN !左端以外なら、左
IF b$(k-1:k-1)="0" AND b$(k-1+N:k-1+N)="0" THEN
LET xn=xn+1
LET x$(xn)=b$
LET x$(xn)(k-1:k-1)=b$(k:k)
LET x$(xn)(k-1+N:k-1+N)=b$(k:k)
LET x$(xn)(k+1:k+1)="0"
LET x$(xn)(k+1+N:k+1+N)="0"
END IF
END IF
IF row<M-2 THEN !下端以外なら、下
IF b$(k+2*N:k+1+2*N)="00" THEN
LET xn=xn+1
LET x$(xn)=b$
LET x$(xn)(k+2*N:k+1+2*N)=b$(k:k+1)
LET x$(xn)(k:k+1)="00"
END IF
END IF

CASE ELSE !0

END SELECT
NEXT j
END SUB

SUB display_answer(i, Lvl(),Bno(), M,N,b$()) !解を表示する
DIM p(0 TO 200) !手数における局面番号 ※
MAT p=ZER
LET j=i
DO UNTIL j=0 !前方へポインタをたどる
LET p(Lvl(j))=j
LET j=Bno(j)
LOOP

PRINT Lvl(i);"手の解(手順)"
MAT PRINT p; !debug
FOR j=0 TO Lvl(i)
PRINT Lvl(p(j));"手目"
CALL display_board(M,N,b$(p(j))) !盤の表示
NEXT j

PRINT
END SUB

SUB normalize_board(M,N,x$, shp(), xx$) !局面を正規化する
LET xx$=""
FOR j=1 TO M*N
IF x$(j:j)>="A" THEN !A,B,C,…
LET t=ORD(x$(j:j))-ORD("A")+10
ELSE !0,1,2,…,8,9
LET t=VAL(x$(j:j))
END IF
LET xx$=xx$&STR$(shp(t)) !形状番号へ
NEXT j
END SUB

SUB display_board(M,N,b$) !盤を表示する
FOR k=0 TO M-1
PRINT b$(k*N+1:k*N+N)
NEXT k

PRINT
END SUB

END


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