!高速化と重複解(回転や対称)の排除への対策 !・片は短辺に沿って置く !・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 !----------------------------------------
|