The two pentominos pictured below cannot tile any rectangle.
+--+ +--+ +--+--+
| | | | | | |
+--+--+--+ +--+--+--+--+
| | | | | | | |
+--+--+--+ +--+--+--+
Take eight copies of one pentomino and place them on a 4x5 rectangle such that each 1x1 subsquare of the rectangle has
exactly two pentominos covering it.
(In reply to
re: considering second pentomino by Brian Smith)
The new version takes into consideration flipping a piece over.
Orientation 4 is the same as 0 but reflected about the long axis.
Orientation 5 is that shape rotated 90° CW, etc.
Again, when the top-left grid position is given for a piece, it may or may not be occupied by part of the pentomino as it may be part of one of the two cutouts.
top-left
corner
row col orientation
3 2 0
1 1 1
1 1 2
1 4 3
1 2 4
1 4 5
3 1 6
1 1 7
Presented as a grid, with the row number of the piece (1 - 8 from the above table), they are covered as follows:
+---+---+---+---+---+
| 8 | 2 | 5 | 5 | 4 |
| 3 | 3 | 3 | 6 | 5 |
+---+---+---+---+---+
| 2 | 2 | 5 | 6 | 4 |
| 8 | 5 | 3 | 3 | 6 |
+---+---+---+---+---+
| 2 | 1 | 1 | 4 | 4 |
| 8 | 8 | 7 | 7 | 6 |
+---+---+---+---+---+
| 2 | 8 | 1 | 1 | 1 |
| 7 | 7 | 7 | 4 | 6 |
+---+---+---+---+---+
The fact that some given number appears sometimes above and sometimes below the other number in the square only reflects the fact they will not occupy just two levels, but there will be gaps. I didn't see the need to put three possible rows of numbers in each grid square.
DECLARE SUB place (pc!)
CLEAR , , 25000
DIM SHARED bd(4, 5)
DIM SHARED row(8), col(8), orient(8), chkProg(8)
'orient: 0 = top up; 1 = top to right; 2 = top down; 3 = top to left
CLS
place 1
SUB place (pc)
FOR o1 = 0 TO 7
o = o1 MOD 4
ref = ABS(o1 > 3)
v = o MOD 2
FOR r = 1 TO 3 - 2 * v
FOR c = 1 TO 2 + 2 * v
IF pc = 1 THEN PRINT o1, r, c
orc = 100 * o1 + 10 * r + c
IF orc >= chkProg(pc - 1) THEN
good = 1
FOR r2 = r TO r + 1 + 2 * v
FOR c2 = c TO c + 3 - 2 * v
chk = 1
IF o = 0 AND r2 = r + ref AND c2 = c + 2 THEN chk = 0
IF o = 0 AND r2 = r + ref AND c2 = c + 3 THEN chk = 0
IF o = 0 AND r2 = r + 1 - ref AND c2 = c THEN chk = 0
IF o = 1 AND r2 = r AND c2 = c + ref THEN chk = 0
IF o = 1 AND r2 = r + 2 AND c2 = c + 1 - ref THEN chk = 0
IF o = 1 AND r2 = r + 3 AND c2 = c + 1 - ref THEN chk = 0
IF o = 2 AND r2 = r + ref AND c2 = c + 3 THEN chk = 0
IF o = 2 AND r2 = r + 1 - ref AND c2 = c THEN chk = 0
IF o = 2 AND r2 = r + 1 - ref AND c2 = c + 1 THEN chk = 0
IF o = 3 AND r2 = r AND c2 = c + ref THEN chk = 0
IF o = 3 AND r2 = r + 1 AND c2 = c + ref THEN chk = 0
IF o = 3 AND r2 = r + 3 AND c2 = c + 1 - ref THEN chk = 0
IF chk THEN
IF bd(r2, c2) > 1 THEN good = 0
END IF
NEXT
NEXT
IF good THEN
FOR r2 = r TO r + 1 + 2 * v
FOR c2 = c TO c + 3 - 2 * v
chk = 1
IF o = 0 AND r2 = r + ref AND c2 = c + 2 THEN chk = 0
IF o = 0 AND r2 = r + ref AND c2 = c + 3 THEN chk = 0
IF o = 0 AND r2 = r + 1 - ref AND c2 = c THEN chk = 0
IF o = 1 AND r2 = r AND c2 = c + ref THEN chk = 0
IF o = 1 AND r2 = r + 2 AND c2 = c + 1 - ref THEN chk = 0
IF o = 1 AND r2 = r + 3 AND c2 = c + 1 - ref THEN chk = 0
IF o = 2 AND r2 = r + ref AND c2 = c + 3 THEN chk = 0
IF o = 2 AND r2 = r + 1 - ref AND c2 = c THEN chk = 0
IF o = 2 AND r2 = r + 1 - ref AND c2 = c + 1 THEN chk = 0
IF o = 3 AND r2 = r AND c2 = c + ref THEN chk = 0
IF o = 3 AND r2 = r + 1 AND c2 = c + ref THEN chk = 0
IF o = 3 AND r2 = r + 3 AND c2 = c + 1 - ref THEN chk = 0
IF chk THEN
bd(r2, c2) = bd(r2, c2) + 1
END IF
NEXT
NEXT
row(pc) = r: col(pc) = c: orient(pc) = o1
chkProg(pc) = orc
IF pc < 8 THEN
place pc + 1
ELSE
FOR i = 1 TO 8
PRINT row(i); col(i); orient(i)
NEXT
PRINT
DO: LOOP UNTIL INKEY$ > ""
END IF
FOR r2 = r TO r + 1 + 2 * v
FOR c2 = c TO c + 3 - 2 * v
chk = 1
IF o = 0 AND r2 = r + ref AND c2 = c + 2 THEN chk = 0
IF o = 0 AND r2 = r + ref AND c2 = c + 3 THEN chk = 0
IF o = 0 AND r2 = r + 1 - ref AND c2 = c THEN chk = 0
IF o = 1 AND r2 = r AND c2 = c + ref THEN chk = 0
IF o = 1 AND r2 = r + 2 AND c2 = c + 1 - ref THEN chk = 0
IF o = 1 AND r2 = r + 3 AND c2 = c + 1 - ref THEN chk = 0
IF o = 2 AND r2 = r + ref AND c2 = c + 3 THEN chk = 0
IF o = 2 AND r2 = r + 1 - ref AND c2 = c THEN chk = 0
IF o = 2 AND r2 = r + 1 - ref AND c2 = c + 1 THEN chk = 0
IF o = 3 AND r2 = r AND c2 = c + ref THEN chk = 0
IF o = 3 AND r2 = r + 1 AND c2 = c + ref THEN chk = 0
IF o = 3 AND r2 = r + 3 AND c2 = c + 1 - ref THEN chk = 0
IF chk THEN
bd(r2, c2) = bd(r2, c2) - 1
END IF
NEXT
NEXT
END IF
END IF
NEXT
NEXT r
NEXT o1
END SUB
|
Posted by Charlie
on 2009-09-30 01:48:37 |