つづき
!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
|