Como probablemente ahora, hay 2339 soluciones para el rompecabezas pentomino en una cuadrícula de 6x10. Existen diferentes esquemas de etiquetado para los 12 pentominoes, dos de ellos se muestran en la imagen a continuación:
Crédito de imagen: Wikipedia
A los fines de la tarea actual, diremos que una solución pentomino normalizada es una solución que utiliza el segundo esquema de etiquetado (Conway).
Ejemplo:
O O O O O S S S Z Z
P P R R S S W W Z V
P P P R R W W Z Z V
U U X R T W Y V V V
U X X X T Y Y Y Y Q
U U X T T T Q Q Q Q
La pieza con 5 cuadrados en fila se denota con letras O
, de acuerdo con el esquema. Lo mismo es cierto para todas las piezas.
Tarea:
Dada una solución para el pentomino 6x10 en el que las piezas están etiquetadas con un sheme aleatorio, normalícelo para que todas las piezas estén etiquetadas en el esquema de etiquetado de Conway. Debe reconocer las piezas y marcar cada cuadrado de una pieza en particular con el símbolo de la pieza.
Entrada:
La solución a normalizar, en cualquier formato que sea conveniente para usted, por ejemplo:
Una cuerda multilínea
Una lista de cadenas
Una lista de listas de personajes.
y así
Salida:
La misma solución (todas las posiciones y orientación de las piezas preservadas), pero cada pieza etiquetada de acuerdo con el esquema de etiquetado de Conway. Nota: La salida DEBE IMPRIMIRSE como una cuadrícula de caracteres de 6x10. Se permiten nuevas líneas y espacios iniciales y finales. También puede imprimir un espacio entre los caracteres (pero no las líneas vacías), como en el ejemplo anterior.
Casos de prueba:
1. Entrada:
6623338888
6222344478
66A234BB70
1AAA94B770
11A99BB700
1199555550
Salida:
UURTTTQQQQ
URRRTVVVSQ
UUXRTVZZSY
PXXXWVZSSY
PPXWWZZSYY
PPWWOOOOOY
2. Entrada:
45ookkkk00
455ooogk00
4a55gggdd0
4aaa3gnnd.
4am333ndd.
mmmm3nn...
Salida:
OWSSQQQQPP
OWWSSSRQPP
OTWWRRRUUP
OTTTXRZZUV
OTYXXXZUUV
YYYYXZZVVV
Criterios ganadores:
La solución más corta en bytes en cada idioma gana. No se desanime por los idiomas de golf. Las explicaciones de los algoritmos y las implementaciones son bienvenidas.
fuente
Respuestas:
APL (Dyalog Classic) ,
545350 bytesPruébalo en línea!
Calcule un invariante para cada pentomino en la entrada: mida (∆x, ∆y) desde cada uno de sus cuadrados hasta su centro de gravedad, tome abs (∆x) y abs (∆y), sume los componentes x y separe los y componentes, y multiplicar las dos sumas. Esto da 12 resultados distintos. Luego, encuentre el índice de cada invariante de pentomino en la colección ordenada de todos los invariantes. Reemplace 0 con
'O'
, 1 con'X'
, 2 con'R'
, etc.fuente
Jalea , 37 bytes
Un programa completo que toma una lista de cadenas (porque debemos imprimir; de lo contrario, elimine el final
Y
y tendrá una mónada tomando una lista de listas de números o caracteres que devuelve una lista de listas de caracteres).Pruébalo en línea!
¿Cómo?
Creo que esto funciona usando la misma categorización de pentominos que la solución APL de ngn , aunque de una manera ligeramente diferente (tampoco conozco APL, así que no estoy seguro de cuán similar es el método más allá de la categorización).
(¡Tenga en cuenta que
“æṂ⁾+’Œ?¤+78Ọ
solo se ahorra un byte“XRPTZWUYSVQO”
!)fuente
Wolfram Language (Mathematica) , 103 bytes
Toma entrada como una lista de listas de caracteres.
Pruébalo en línea!
La idea principal aquí es que para cada carácter en la entrada, encontramos las coordenadas donde ocurre, tomamos la curtosis y sumamos sus coordenadas. Esto nos da una invariante para cada pieza.
(La curtosis es un operador mayormente irrelevante de las estadísticas; la clave es que es invariante bajo traducción, mientras que la reflexión y la rotación pueden cambiar el orden de las coordenadas como máximo. Sumamos las coordenadas, por lo que la invariante nunca cambia).
De todos modos, aparte de la extraña invariante, esta solución es similar a las demás: clasificamos los caracteres y las piezas por cada invariante, luego reemplazamos cada personaje por el carácter correspondiente de
"UPSWZVRTQXYO"
: las piezas, ordenadas por suma de curtosis.Finalmente,
""<>Riffle[...,"\n"]
es el código de imprimir como una cuadrícula.fuente
Sort@Variance
lugarTr@Kurtosis
, y probablemente más personas hayan oído hablar de la variación. PeroTr@Variance
no funciona porque varios pentominoes (como P y X) tienen la misma suma de varianza x y varianza y. Así que busqué en la documentación de Mathematica algo más elegante.Python 2 , 191 bytes
Pruébalo en línea!
Toma una cadena de varias líneas con una nueva línea final y realiza seis comprensiones de listas anidadas.
Versión sin golf
fuente