handlePlacementClick(row, col, true)}
+ title="Place horizontally"
+ />
+ );
+ }
+ if (validVertical && !isOccupied) {
+ cells.push(
+
handlePlacementClick(row, col, false)}
+ title="Place vertically"
+ />
+ );
+ }
+ }
+ }
+
+ // Render dominoes
+ dominoes.forEach(d => {
+ const isSelected = selectedDomino === d.id;
+ const width = d.isHorizontal ? 96 : 46;
+ const height = d.isHorizontal ? 46 : 96;
+
+ cells.push(
+
handleDominoClick(d.id)}
+ >
+
+
+ );
+ });
+
+ return cells;
+ };
+
+ const horizontalCount = dominoes.filter(d => d.isHorizontal).length;
+ const verticalCount = dominoes.filter(d => !d.isHorizontal).length;
+
+ return (
+
+
+
+
+ Domino Retiling Puzzle
+
+
+ Can you retile the augmented board so all dominoes are horizontal?
+
+
+
+
+
+ An 8×8 board is tiled with 32 dominoes. An extra square is added to the top-right.
+ Move dominoes one at a time to make all dominoes horizontal.
+
+
+
+
+
+ New Puzzle
+
+ setShowHint(!showHint)} variant="outline" size="sm">
+
+ {showHint ? 'Hide Hint' : 'Show Hint'}
+
+
+
+
+
+ Moves: {moveCount}
+
+
+ Horizontal: {horizontalCount}
+
+
+ Vertical: {verticalCount}
+
+
+
+
+
+
+ {showHint && (
+
+
+
+
+
+
Hint:
+
Consider the coloring argument: in a standard chessboard coloring, each horizontal domino covers one black and one white square.
+ But on the augmented board (8×8 + 1 extra square), the parity changes. Think about what this means for the possibility of an all-horizontal tiling!
+
+
+
+
+ )}
+
+ {/* Instructions */}
+
+ setShowInstructions(!showInstructions)}
+ >
+
+ Instructions
+ {showInstructions ? (
+
+ ) : (
+
+ )}
+
+
+ {showInstructions && (
+
+
+
+ Click on a domino to select it (turns yellow)
+ Valid placement positions will appear as dashed outlines
+ Click on a valid position to move the domino there
+ You can only move a domino if there are two adjacent empty squares to receive it
+ Goal: Make all 32 dominoes horizontal
+
+
+
+
+
+ )}
+
+
+ {/* Board */}
+
+
+
+ {selectedDomino !== null && (
+
+ Domino selected. Click on a valid placement (dashed outline) to move it, or click the domino again to deselect.
+
+ )}
+
+
+
+ {/* Result */}
+ {isSolved && (
+
+
+
+
+
+
+ Wait... You solved it? That shouldn't be possible!
+
+
+ Actually, this puzzle is impossible to solve! The extra square creates a parity imbalance that prevents an all-horizontal tiling.
+
+
+
+
+
+ )}
+
+ {/* Social Share */}
+ {showSocialShare && (
+
+ )}
+
+ );
+};
+
+export default DominoRetilingPuzzle;
\ No newline at end of file
diff --git a/src/pages/DominoRetilingPuzzlePage.tsx b/src/pages/DominoRetilingPuzzlePage.tsx
new file mode 100644
index 0000000..e3f7af7
--- /dev/null
+++ b/src/pages/DominoRetilingPuzzlePage.tsx
@@ -0,0 +1,28 @@
+import Layout from '@/components/Layout';
+import DominoRetilingPuzzle from '@/components/DominoRetilingPuzzle';
+import { useLocation, Link } from 'react-router-dom';
+import { ArrowLeft } from 'lucide-react';
+
+const DominoRetilingPuzzlePage = () => {
+ const location = useLocation();
+ const fromPuzzles = location.search.includes('from=puzzles');
+
+ return (
+
+ {fromPuzzles && (
+
+
+
+ Back to Puzzles
+
+
+ )}
+
+
+ );
+};
+
+export default DominoRetilingPuzzlePage;
\ No newline at end of file
diff --git a/src/pages/theme-pages/Puzzles.tsx b/src/pages/theme-pages/Puzzles.tsx
index aec26e1..fe0b0ba 100644
--- a/src/pages/theme-pages/Puzzles.tsx
+++ b/src/pages/theme-pages/Puzzles.tsx
@@ -85,6 +85,16 @@ const Puzzles = () => {
difficulty: "Intermediate" as const,
duration: "10-20 min",
participants: "1 player"
+ },
+ {
+ id: "domino-retiling",
+ title: "Domino Retiling Puzzle",
+ description: "An 8×8 board tiled with dominoes gets an extra square. Can you retile so all dominoes are horizontal?",
+ path: "/puzzles/domino-retiling",
+ tags: ["Parity", "Impossibility", "Logic", "Tiling"],
+ difficulty: "Advanced" as const,
+ duration: "10-30 min",
+ participants: "1 player"
}
];