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

ペントミノをプログラムで解く


  ペントミノをプログラムで解く 山中和義 2008/06/03 10:37:14 
  つづき 山中和義 2008/06/03 10:38:08 
Re: ペントミノをプログラムで解く  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/06/03 10:38:08
つづき


LET M=8 !行 ※盤の大きさ
LET N=8 !列

DIM board$(M,N) !盤
FOR yy=1 TO M !盤の初期化
FOR xx=1 TO N
LET board$(yy,xx)="." !空き
NEXT xx
NEXT yy
LET board$(4,4)=" " !ピリオド以外の文字
LET board$(5,4)=" "
LET board$(4,5)=" "
LET board$(5,5)=" "
CALL display_board(M,N,board$)
!----------------------------------------


PUBLIC NUMERIC ANSWER_COUNT !解答数
LET ANSWER_COUNT=0

LET a=MAX(M,N)
SET WINDOW 0,a+2,a+2,0 !表示領域


DIM R90(2,2) !90度回転
90 DATA 0,-1 !(cosθ -sinθ)
DATA 1, 0 !(sinθ cosθ)
RESTORE 90
MAT READ R90

DIM REV(2,2) !裏返す ※Y軸対称
95 DATA -1,0 !scale
DATA 0,1
RESTORE 95
MAT READ REV


!技術メモ
! すべての向き
! F0,F1,F2,F3, f0,f1,f2,f3
! L0,L1,L2,L3, l0,l1,l2,l3
! N0,N1,N2,N3, n0,n1,n2,n3
! P0,P1,P2,P3, p0,p1,p2,p3
! Y0,Y1,Y2,Y3, y0,y1,y2,y3
! Z0,Z1, z0,z1
!
! I0,I1
! T0,T1,T2,T3
! U0,U1,U2,U3
! V0,V1,V2,V3
! W0,W1,W2,W3
! X0

DIM nam$(PIECE_COUNT),shape(PIECE_COUNT*PIECE_SIZE*8,2) !片のなまえ、8方向の形状

DIM shp(PIECE_SIZE,2)
FOR i=1 TO PIECE_COUNT
CALL get_shape(i, nam$(i),shp) !形状を得る
FOR j=1 TO 2 !裏返し
FOR k=1 TO 4 !回転
LET id=(j-1)*4+k
CALL set_piece(i,id,shp, shape) !記録する

CALL operate_piece(shp,R90) !+90度
NEXT k
CALL operate_piece(shp,REV) !裏返す
NEXT j
NEXT i



DIM piece(PIECE_COUNT,3) !片の向き(使用フラグを兼ねる)、配置位置
MAT piece=ZER

LET t0=TIME

FOR xx=1 TO INT((N-3)/2)+1 !X片を盤の左上1/4に置く
FOR yy=1 TO INT((M-3)/2)+1 !※3=幅、高さ

LET shp1=get_piece(1,1) !形状を得る

CALL check_site(shp1,yy,xx, K, shape, M,N,board$) !うまく置ければ
IF K>PIECE_SIZE THEN

LET piece(1,1)=1 !1番目
LET piece(1,2)=xx
LET piece(1,3)=yy

CALL put_piece(nam$(1),shp1,yy,xx, shape, board$) !配置する
CALL display_board(M,N,board$)

CALL try(2, piece,nam$, shape, M,N,board$, 1,1) !※

PRINT "計算時間=";TIME-t0

CALL put_piece(".",shp1,yy,xx, shape, board$) !元に戻す

END IF

NEXT yy
NEXT xx


END
   └つづき 山中和義 2008/06/03 10:39:53 
    └つづき(サブルーチン) 山中和義 2008/06/03 10:43:57 
     └つづき 山中和義 2008/06/03 10:44:52 
      ├DELETED  島村1243  2008/06/03 13:10:41  (削除)
      └DELETED  島村1243  2008/06/03 21:30:01  (削除)

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