LET BUFFER_SIZE=30000 !バッファの大きさ ※
LET M=5 !行 ※盤の大きさ LET N=4 !列
LET PIECE_SIZE=10 !駒の数 ※ !LET PIECE_SIZE=11 !駒の数 ※
!技術メモ ! 0:空き ! 1:1x1 ! 2:1x2(横長) ! 3:2x1(縦長) ! 4:2x2(娘) !駒= 0,1,2,3,4,5,6,7,8,9,A,B DATA 0,3,3,3,3,2,1,1,1,1,4 !駒との対応 ※ !DATA 0,3,3,3,3,1,1,1,1,1,1,4 !駒との対応 ※
DATA "1AA2" !盤の初期配置 ※ DATA "1AA2" DATA "3554" DATA "3674" DATA "8009" !DATA "1BB2" !盤の初期配置 ※ !DATA "1BB2" !DATA "3564" !DATA "3784" !DATA "900A" !------------------------------ ここまでがデータ
DIM shp(0 TO PIECE_SIZE) !駒の型番 MAT READ shp
DIM b$(BUFFER_SIZE) !局面 LET b$(1)="" FOR j=1 TO M READ xx$ LET b$(1)=b$(1)&xx$ NEXT j
DIM c$(BUFFER_SIZE) !正規化した局面 CALL normalize_board(M,N,b$(1), shp, c$(1))
DIM Lvl(BUFFER_SIZE) !手数 MAT Lvl=ZER DIM BNo(BUFFER_SIZE) !1つ前の局面番号 MAT BNo=ZER
DIM x$(8) !次の局面の候補
LET tail=1 !局面の追加位置(末尾)
LET minLvl=200 !最小手数(仮) ※ DIM head(-1 TO minLvl) !i番目の手のバッファ上での先頭位置 LET head(-1)=1 !-1手 ※番兵 LET head(0)=1 !0手 LET iLvl=0
LET t0=TIME
LET i=1 !展開中の局面 DO !!!PRINT "No.";i;"(";Lvl(i);"手 ";Bno(i);"から)" !debug !!!CALL display_board(M,N,b$(i)) !debug
IF c$(i)(18:19)="44" THEN !クリアなら !IF c$(i)(14:15)="44" AND c$(i)(18:19)="44" THEN !クリアなら IF Lvl(i)>minLvl THEN EXIT DO LET minLvl=Lvl(i) !最小手数を記録する CALL display_answer(i, Lvl,Bno, M,N,b$) ELSE
|