Debe escribir un programa o función que reciba una cadena que describa el piso como entrada y salida o que devuelva el área del meta-mosaico más simple que podría crear el patrón dado del piso.
El piso es parte de una cuadrícula cuadrada. Cada mosaico cuadrado tiene un color azul o negro (representado por a
y b
en la entrada).
Un ejemplo de piso:
aaaa
ababab
aaaaa
Un meta-mosaico
- se construye a partir de una
N
porM
rectangular meta-baldosas de cuadrados azules y negros - los meta-mosaicos utilizados son idénticos hasta la traducción (no puede rotarlos ni reflejarlos)
- Si los lados de dos meta-mosaicos están conectados, deben conectarse a lo largo de toda su longitud (es decir, los meta-mosaicos recubren el espacio en forma de cuadrícula)
Un ejemplo de meta-mosaico:
ba
aa
y el meta-mosaico creado por él:
.
.
.
babababa
aaaaaaaa
... babababa ...
aaaaaaaa
babababa
aaaaaaaa
.
.
.
Este meta-mosaico crea el piso superior que se muestra como muestran las letras de la izquierda:
.
.
.
********
***aaaa*
... *ababab* ...
*aaaaa**
********
********
.
.
.
Un meta-mosaico es más simple que otro si el área de su meta-mosaico es más pequeña. Nuestro ejemplo tiene un área 2*2 = 4
que es la más pequeña posible para el piso de ejemplo. Entonces la salida debería ser 4
para el ejemplo.
Entrada
- Una cadena que consta de los caracteres
a b space
y quenewline
contiene al menos unoa
ob
. - Las letras (
ab
) forman una forma de 4 conectados (uno al lado del otro). - No habrá espacios innecesarios al frente de las filas, es decir, habrá al menos una fila que comience con
a
ob
. Puede elegir entre dos formatos de entrada:
- Sin espacios en blanco innecesarios al final de las filas (como se ve en los ejemplos).
- Espacios en el lado derecho de las filas para hacer que todas las filas tengan la misma longitud que la fila más larga.
La nueva línea final es opcional.
Salida
- Un solo entero, el área del meta-mosaico más pequeño posible cuyo mosaico contiene el piso de entrada.
Ejemplos
Los ejemplos están delimitados por guiones. Las tres partes de un ejemplo son entrada, salida y uno de los meta-mosaicos más pequeños posibles.
a
1
a
-----------------
aaaa
aaa
a
1
a
-----------------
aabaab
abaa
aaba
6
aab
aba
-----------------
aabaab
a a a
aabab
18
aabaab
aaaaaa
aababa
-----------------
ba
aaab
8
baaa
aaab
-----------------
aaaa
ababb
aaaa
10
aaaaa
ababb
-----------------
a aa
ab ba
aba
6
aa
ab
ba
-----------------
aaaa
abab
aaaa
4
aa
ab
-----------------
ba
ba
b
4
ba
ab
-----------------
baa
aba
aab
9
baa
aba
aab
-----------------
aaaa
aabaa
aaaa
6
aaa
aab
Este es el código de golf por lo que gana la entrada más corta
Respuestas:
C - 208 bytes
Código equivalente antes de jugar al golf:
El algoritmo es bastante fuerza bruta, por lo que debería ser razonablemente obvio cómo funciona según el código. Aquí hay algunos comentarios de todos modos:
q
. Sale con unreturn
cuando un meta-mosaico puede cubrir el piso. Tenga en cuenta que el bucle no necesita otra condición de salida ya que siempre hay una solución (el peor de los casos es el tamaño de la entrada).if
enumera combinaciones válidas de ancho / alto de meta-mosaico para el tamañoq
.u
es el índice en el meta-mosaico que corresponde al piso.a
o sonb
diferentes (suma dea = 97
yb = 98
es195
), hay una falta de coincidencia y el tamaño de la meta-loseta con las dimensiones intentadas no funcionará.a
ob
, el color de la baldosa se copia en la metaplaca candidata.Código de prueba utilizado:
Salida:
fuente