La tarea aquí es leer un .rle
archivo Golly o de texto sin formato (su elección) cuyo nombre de archivo se proporciona (en STDIN o como un argumento de línea de comando) e identificar y contar los patrones comunes en la cuadrícula codificada allí.
Alternativamente, puede optar por que el contenido del archivo se proporcione directamente a través de STDIN.
Su programa debe poder identificar y distinguir al menos los quince bodegones estrictos más comunes y los cinco osciladores más comunes , además de planeadores .
Deben reconocerse todas las fases de estos osciladores, al igual que las cuatro fases del planeador.
Debería generar una lista que contenga el conteo final de cada patrón, con el nombre y la cantidad de cada patrón en una línea separada. Su programa puede incluir en la lista de salida todos estos patrones o solo aquellos en los que se encontró al menos uno.
Los patrones que forman parte de otros patrones que se cuentan no deben contarse. (por ejemplo, la fase de 8 celdas de una baliza no debe contarse también como dos bloques, y un empate no debe contarse también como dos barcos)
Puede suponer que la entrada ya se ha estabilizado y no contiene patrones que no estén en el conjunto mencionado anteriormente. También puede suponer que la cuadrícula de entrada se ajustará dentro de un cuadro de 1024x1024.
Este es el código de golf , por lo que gana el programa más corto.
Descripción del formato de archivo RLE
Un archivo RLE contiene una cuadrícula de vida codificada de longitud de ejecución. Todas las líneas que comienzan con #
son comentarios y deben ignorarse.
La primera línea no vacía, sin comentarios es de la forma x=<width>,y=<height>,rule=<rule>
. Para los propósitos de esta tarea, la regla siempre será B3/S23
. Puede contener espacios que deben eliminarse antes de procesar esta línea (por supuesto, no es necesario procesar esta línea en absoluto).
Las líneas sin comentarios después de la primera deben tratarse como una sola cadena. Esto debe consistir solo en dígitos decimales, los caracteres $
, b
y o
, y saltos de línea, y no terminará con un dígito. Se deben ignorar los saltos de línea, pero puede suponer que los saltos de línea no interrumpirán las cadenas de dígitos.
Esto puede ser terminado por un solo !
.
b
representa una celda muerta, o
representa una celda viva y $
representa el final de una fila. Cualquier número decimal indica que el siguiente símbolo debe tratarse como una repetición tantas veces.
Codificación de patrón de texto sin formato
La otra opción es leer el patrón en otro formato de texto sin formato descrito aquí. En esta codificación, las celdas apagadas se representan con guiones y las celdas encendidas se representan con letras mayúsculas, con líneas nuevas que separan las filas.
Puede suponer que todas las líneas sin comentarios se rellenarán con la misma longitud con guiones.
Las líneas que comienzan con !
son comentarios y deben ignorarse.
Algunos casos de prueba
RLE:
#This is a comment
x = 35, y = 16, rule = B3/S23
bo$2o$obo5$22bo$22bo$22bo2$18b3o3b3o2$22bo$22bo10b2o$22bo10b2o!
Texto sin formato:
!This is a comment
-O---------------------------------
OO---------------------------------
O-O--------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
----------------------O------------
----------------------O------------
----------------------O------------
-----------------------------------
------------------OOO---OOO--------
-----------------------------------
----------------------O------------
----------------------O----------OO
----------------------O----------OO
Resultados:
Glider 1
Blinker 4
Block 1
RLE:
x = 27, y = 15, rule = B3/S23
5b2o$5b2o9$11bo$o9bobo$o9bobo$o10bo12b3o!
#Here's a comment at the end
Texto sin formato:
-----OO--------------------
-----OO--------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
-----------O---------------
O---------O-O--------------
O---------O-O--------------
O----------O------------OOO
!Here's a comment at the end
Resultados:
Block 1
Blinker 2
Beehive 1
RLE:
#You may have multiple comments
#As shown here
x = 13, y = 11, rule = B3/S23
2o$2o2$12bo$12bo$12bo$2b2o$2b2o4b2o$7bo2bo$7bobo$8bo!
Texto sin formato:
!You may have multiple comments
!As shown here
OO-----------
OO-----------
-------------
------------O
------------O
------------O
--OO---------
--OO----OO---
-------O--O--
-------O-O---
--------O----
Resultados:
Block 2
Blinker 1
Loaf 1
RLE:
# Pentadecathlon
# Discovered by John Conway
# www.conwaylife.com/wiki/index.php?title=Pentadecathlon
x = 10, y = 3, rule = B3/S23
2bo4bo2b$2ob4ob2o$2bo4bo!
Texto sin formato:
! Pentadecathlon
! Discovered by John Conway
! www.conwaylife.com/wiki/index.php?title=Pentadecathlon
--O----O--
OO-OOOO-OO
--O----O--
Resultados:
Pentadecathlon 1
Prima
Si admite ambos formatos de entrada (usando la extensión de archivo [ .rle
para archivos rle y .cells
para texto sin formato, cómo no se definen otras extensiones] o un indicador de línea de comando para distinguirlos) puede restar un 5% de su puntaje.
fuente
OOO.OO\n....OO
Respuestas:
Haskell, 2417 bytes
Esto tomó bastante tiempo y todavía hay algunos errores, pero obtuve varios trucos funcionando, así que valió la pena.
Notas:
Combina algunas ideas clave:
Aquí está el código:
Aquí está el código de Mathematica que se usa para empaquetar una matriz de 0,1 en el formato que el programa haskell descomprimió más tarde:
Aquí hay una versión mucho más completa del código:
fuente