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

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


  ペントミノをプログラムで解く 山中和義 2008/06/03 10:37:14 
ペントミノをプログラムで解く  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/06/03 10:37:14
!高速化と重複解(回転や対称)の排除への対策
!・片は短辺に沿って置く
!・X片の配置を盤左上1/4に限定
! 軸対称の位置で2重に探索する → 3x20 4個、4x15 402個、8x8 130個、5x12 ?個、6x10 ?個


PUBLIC NUMERIC PIECE_COUNT,PIECE_SIZE !共通の定数 ※
LET PIECE_COUNT=12 !片の数
LET PIECE_SIZE=5 !正方形の数

SUB get_shape(p, nam$,shape(,)) !形状を得る
SELECT CASE p
CASE 1
RESTORE 01
CASE 2
RESTORE 02
CASE 3
RESTORE 03
CASE 4
RESTORE 04
CASE 5
RESTORE 05
CASE 6
RESTORE 06
CASE 7
RESTORE 07
CASE 8
RESTORE 08
CASE 9
RESTORE 09
CASE 10
RESTORE 10
CASE 11
RESTORE 11
CASE 12
RESTORE 12
CASE ELSE
PRINT "引数が不正です。";p
STOP
END SELECT

READ nam$
MAT READ shape

!ペントミノ(Pentomino) 12片の定義

!技術メモ
! Fの場合の形状データ
!  +0+1+2 →x
! +0FF
! +1 FF
! +2 F
!y↓

!両面型ペントミノ
12 DATA "F"
DATA 0,0 !x,y
DATA 1,0
DATA 1,1
DATA 2,1
DATA 1,2

04 DATA "L"
DATA 0,0
DATA 0,1
DATA 0,2
DATA 0,3
DATA 1,3

05 DATA "N"
DATA 0,0
DATA 0,1
DATA 0,2
DATA 1,2
DATA 1,3

11 DATA "P"
DATA 0,0
DATA 1,0
DATA 0,1
DATA 1,1
DATA 0,2

06 DATA "Y"
DATA 1,0
DATA 0,1
DATA 1,1
DATA 1,2
DATA 1,3

10 DATA "Z"
DATA 0,0
DATA 1,0
DATA 1,1
DATA 1,2
DATA 2,2

!片面型ペントミノ
03 DATA "I"
DATA 0,0
DATA 0,1
DATA 0,2
DATA 0,3
DATA 0,4

07 DATA "T"
DATA 0,0
DATA 1,0
DATA 2,0
DATA 1,1
DATA 1,2

02 DATA "U"
DATA 0,0
DATA 2,0
DATA 0,1
DATA 1,1
DATA 2,1

08 DATA "V"
DATA 0,0
DATA 0,1
DATA 0,2
DATA 1,2
DATA 2,2

09 DATA "W"
DATA 0,0
DATA 0,1
DATA 1,1
DATA 1,2
DATA 2,2

01 DATA "X"
DATA 1,0
DATA 0,1
DATA 1,1
DATA 2,1
DATA 1,2

END SUB
!----------------------------------------
  つづき 山中和義 2008/06/03 10:38:08 
   └つづき 山中和義 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
新規発言を反映させるにはブラウザの更新ボタンを押してください。