Rompecabeza del triominó mediante divide y vencerás
Un poliominó es una figura geométrica plana formada conectando dos o más cuadrados por alguno de sus lados. Los cuadrados se conectan lado con lado, pero no se pueden conectar ni por sus vértices, ni juntando solo parte de un lado de un cuadrado con parte de un lado de otro. Si unimos dos cuadrados se obtiene un dominó, si se juntan tres cuadrados se construye un triominó.
Sólo existen dos triominós, el I-triomino (por tener forma de I) y el L-triominó (por su forma de L) como se observa en las siguientes figuras
X X X X XX
El rompecabeza del triominó consiste en cubrir un tablero cuadrado con 2^n filas y 2^n columnas, en el que se ha eliminado una casilla, con L-triominós de formas que cubran todas las casillas excepto la eliminada y los triominós no se solapen.
La casilla eliminada se representará con -1 y los L-triominós sucesiones de tres números consecutivos en forma de L. Con esta representación una solución del rompecabeza del triominó con 4 filas y la fila eliminada en la posición (4,4) es
( 3 3 2 2 ) ( 3 1 1 2 ) ( 4 1 5 5 ) ( 4 4 5 -1 )
Definir la función
triomino :: Int -> Posicion -> Tablero
tal que (triomino n p) es la solución, mediante divide y vencerás, del rompecabeza del triominó en un cuadrado nxn en el que se ha eliminado la casilla de la posición p. Por ejemplo,
λ> triomino 4 (4,4) ( 3 3 2 2 ) ( 3 1 1 2 ) ( 4 1 5 5 ) ( 4 4 5 -1 ) λ> triomino 4 (2,3) ( 3 3 2 2 ) ( 3 1 -1 2 ) ( 4 1 1 5 ) ( 4 4 5 5 ) λ> triomino 16 (5,6) ( 7 7 6 6 6 6 5 5 6 6 5 5 5 5 4 4 ) ( 7 5 5 6 6 4 4 5 6 4 4 5 5 3 3 4 ) ( 8 5 9 9 7 7 4 8 7 4 8 8 6 6 3 7 ) ( 8 8 9 3 3 7 8 8 7 7 8 2 2 6 7 7 ) ( 8 8 7 3 9 -1 8 8 7 7 6 6 2 8 7 7 ) ( 8 6 7 7 9 9 7 8 7 5 5 6 8 8 6 7 ) ( 9 6 6 10 10 7 7 11 8 8 5 9 9 6 6 10 ) ( 9 9 10 10 10 10 11 11 1 8 9 9 9 9 10 10 ) ( 8 8 7 7 7 7 6 1 1 9 8 8 8 8 7 7 ) ( 8 6 6 7 7 5 6 6 9 9 7 8 8 6 6 7 ) ( 9 6 10 10 8 5 5 9 10 7 7 11 9 9 6 10 ) ( 9 9 10 4 8 8 9 9 10 10 11 11 5 9 10 10 ) ( 9 9 8 4 4 10 9 9 10 10 9 5 5 11 10 10 ) ( 9 7 8 8 10 10 8 9 10 8 9 9 11 11 9 10 ) ( 10 7 7 11 11 8 8 12 11 8 8 12 12 9 9 13 ) ( 10 10 11 11 11 11 12 12 11 11 12 12 12 12 13 13 )