Se ha demostrado que las siguientes 13 fichas cuadradas de Wang siempre enlosan el avión periódicamente . Esto significa que cuando los cuadrados se organizan en una cuadrícula con todos los lados vecinos del mismo color, una traducción del patrón nunca coincidirá consigo misma.
Representaremos cada mosaico textualmente por una cuadrícula de 3 × 3 llena de espacios en el centro y las esquinas, y los números del 1 al 5 en lugar de los colores rojo, verde, azul, amarillo, gris, en los bordes:
2 2 2 1 1 1 4 3 2 2 4 3 2
1 2 1 3 2 3 2 1 3 1 3 2 4 4 4 4 4 5 4 5 5 5 5 5 5 4
3 2 3 2 3 2 1 2 1 4 1 2 2
Gol
Su tarea es escribir un programa que tome un ancho y una altura y genere una cuadrícula de mosaico Wang válida con esas dimensiones. Un mosaico válido es aquel en el que todos los bordes de mosaico adyacentes tienen el mismo color (o número). El programa más pequeño en bytes gana.
Su entrada debe provenir de stdin o argumentos de línea de comando y la salida debe ir a stdout. El formato de entrada exacto puede ser algo razonablemente obvio, como >>> wangtiler 3 2
. El ancho y la altura son siempre enteros positivos.
Ejemplo (ancho = 3, altura = 2)
Observe que cuando diseñamos los mosaicos textuales, los bordes vecinos forman los pares de dígitos redundantes necesarios:
1 2 1
2 11 22 1
2 3 2
2 3 2
4 55 55 4
1 2 2
(Este NO es el formato de salida adecuado).
Podemos comprimir estos horizontal y verticalmente para obtener:
1 2 1
2 1 2 1
2 3 2
4 5 5 4
1 2 2
Este formato comprimido es el formato de salida adecuado que debe usar. Las líneas impares deben incluir su espacio final.
Bonus gráfico
En lugar de tener una salida textual, su programa puede generar una imagen de la cuadrícula en mosaico. Los mosaicos gráficos deben estar formados por cuatro triángulos 45-45-90 dispuestos en un cuadrado y usar cinco colores fácilmente distinguibles como los mosaicos de arriba. Los bordes negros no son obligatorios. Los mosaicos gráficos deben tener al menos 32 × 32 píxeles de tamaño. No se les aplica "compresión".
Imagen de bonificación de ejemplo: (misma cuadrícula que el ejemplo anterior)
El bono vale menos 150 bytes.
Notas
- Debes usar este conjunto de 13 fichas.
- Las baldosas no pueden rotarse.
- Los mosaicos pueden aparecer varias veces (sin incluir ninguno).
- Puede suponer que es posible un mosaico válido con cualquier dimensión.
fuente
Respuestas:
GolfScript, 200 caracteres
Versión ASCII sin salida gráfica. Dé la entrada en STDIN - intente aquí . El código utiliza un enfoque de retroceso simple y llena el espacio línea por línea.
Ejemplos:
Bonificación gráfica, puntuación 122, 272 caracteres - bonificación 150
El mismo código básico con un formateador de salida diferente. La salida es una imagen en formato PPM (es decir, simplemente redirige la salida a un archivo
image.ppm
). Los colores son ligeramente diferentes a los mosaicos de la pregunta, pero se distinguen claramente (1-> azul, 2-> verde, 3-> cian, 4-> rojo, 5-> magenta).Ejemplo 16x12:
fuente
Python (565-150 = 415)
Por cierto ... parece que no podemos ingenuamente decidir el siguiente mosaico por su mosaico izquierdo y superior. Hay una combinación de fichas que se adaptarán entre sí.
Esta solución completa las fuerzas brutas izquierda-> derecha, arriba-> abajo a través de todas las combinaciones posibles y retrocesos si una ficha no puede encajar.
Para obtener más información sobre la prueba de 13 fichas : un conjunto aperiódico de 13 fichas de Wang
El ancho y la altura se especifican mediante
W
yH
Rojo, Verde, Azul, Amarillo y Negro especificados por
R
,G
,B
,Y
yN
Salida. No es el esquema de color real ... porque es demasiado deslumbrante. Esto podría hacer algunos patrones de decoración de interiores interesantes ...:
fuente
Haskell, 208 bytes
Sin búsquedas, solo matemáticas. Ejecución de ejemplo: dada
(8,5)
en stdin, salidasCorre en línea en Ideone
fuente