Dado es un tablero de tamaño variable con un tamaño máximo de 5 veces 5 campos. Cada campo puede llenarse con una 'x'. Si no se llena con una 'x', se llena con una 'o'.
Se da el estado inicial de cada tablero (ver más abajo). Con cada tablero, se deben jugar 10 rondas (como máximo, condiciones: ver más abajo) y se debe observar la evolución de la x.
Una ronda funciona de la siguiente manera:
- cada 'x' se extiende a campos que bordean ortogonalmente, pero desaparece
- cada vez que dos 'x' están en un campo, se neutralizan entre sí
La evolución de todas las 'x' en cada ronda tiene que suceder simultáneamente. Ejemplo:
o o o o x o
o x o -> x o x
o o o o x o
Con cada ronda de evolución, tienes que ver si el tablero se vacía de 'x'. Si no está vacío, podría estar presente un patrón repetitivo. Si este tampoco es el caso, renunciamos al análisis de la evolución. Además, debe imprimir el porcentaje máximo de campos x para cada tablero inicial (redondeado a números enteros).
Entrada:
Los datos de entrada se pueden encontrar aquí (Pastebin). Estos datos contienen 100 estados iniciales. Como ya se mencionó, las tablas varían en tamaño. El número de filas se indica con el número n del 1 al 5, seguido de n filas que contienen solo 'x' y 'o', representan el patrón inicial. Cada fila de un tablero tiene de 1 a 5 campos.
Salida:
El resultado completo debe imprimirse, una fila impresa para cada tablero inicial en el siguiente formulario:
Round {0-10}: {repetition/empty/giveup}, {0-100} percent maximum-fill
Ejemplos:
Ejemplo 1:
Input: 2 Starting state: x o x
xox x x
xx
Round 1: x x o
o x
Round 2: x o x
o x
Round 3: o x o
o o
Round 4: x o x -> The pattern repeats:
o x It is the same as in round 2,
therefore we stop. Maximum fill was
in the starting state with four times 'x'
of 5 fields altogether,
so we have 4/5 = 80 %.
Output: Round 4: repetition, 80 percent maximum-fill
Ejemplo 2
Input: 1 Starting state: x x
xx
Round 1: x x -> We already have a repetition, because
the pattern is the same as in the starting
state. The board is always filled 100 %.
Output: Round 1: repetition, 100 percent maximum-fill
Después del octavo día, marcaré la respuesta de trabajo con la menor cantidad de caracteres como el ganador. Además, publicaré la salida correcta para las 100 placas iniciales (entrada).
Puede usar su lenguaje preferido (programación / scripting / lo que sea).
¡Que te diviertas!
PD: Si tiene preguntas, no dude en preguntar.
PPS: con respecto a los creadores originales: para las personas capaces de hablar alemán, la pregunta se tomó de NO HAGA CLIC SI NO DESEA SPOILERS aquí . Dado que el tiempo oficial para completar el desafío ha terminado, quería ver si alguien podría llegar a una solución corta y elegante.
22.04.2014:
Desafío hecho! Ganador marcado como aceptado. Salida correcta:
Round 10: giveup, 50 percent maximum-fill
Round 5: empty, 66 percent maximum-fill
Round 1: repetition, 100 percent maximum-fill
Round 1: empty, 100 percent maximum-fill
Round 4: repetition, 100 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 2: repetition, 60 percent maximum-fill
Round 4: empty, 88 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 5: repetition, 80 percent maximum-fill
Round 10: repetition, 80 percent maximum-fill
Round 1: empty, 80 percent maximum-fill
Round 3: repetition, 60 percent maximum-fill
Round 4: repetition, 48 percent maximum-fill
Round 9: empty, 41 percent maximum-fill
Round 10: giveup, 92 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 88 percent maximum-fill
Round 10: giveup, 76 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Round 10: giveup, 40 percent maximum-fill
Round 10: giveup, 100 percent maximum-fill
Round 10: giveup, 71 percent maximum-fill
Round 2: empty, 81 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 3: empty, 80 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 83 percent maximum-fill
Round 7: repetition, 37 percent maximum-fill
Round 9: repetition, 85 percent maximum-fill
Round 5: repetition, 40 percent maximum-fill
Round 5: repetition, 60 percent maximum-fill
Round 4: empty, 80 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 46 percent maximum-fill
Round 6: repetition, 42 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 4: repetition, 80 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 4: repetition, 56 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 54 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 7: empty, 85 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 70 percent maximum-fill
Round 2: empty, 66 percent maximum-fill
Round 1: empty, 66 percent maximum-fill
Round 3: empty, 100 percent maximum-fill
Round 3: empty, 66 percent maximum-fill
Round 8: repetition, 42 percent maximum-fill
Round 1: empty, 60 percent maximum-fill
Round 2: repetition, 100 percent maximum-fill
Round 2: repetition, 83 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 56 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 6: repetition, 33 percent maximum-fill
Round 3: empty, 57 percent maximum-fill
Round 3: repetition, 100 percent maximum-fill
Round 6: repetition, 73 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 73 percent maximum-fill
Round 5: empty, 80 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 3: repetition, 53 percent maximum-fill
Round 10: giveup, 33 percent maximum-fill
Round 10: giveup, 80 percent maximum-fill
Round 10: giveup, 63 percent maximum-fill
Round 10: giveup, 70 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 7: repetition, 70 percent maximum-fill
Round 10: repetition, 57 percent maximum-fill
Round 10: giveup, 55 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 4: repetition, 75 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 10: giveup, 64 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 10: giveup, 58 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 4: repetition, 40 percent maximum-fill
Round 4: empty, 40 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Respuestas:
Perl
308, 304, 305, 293, 264, 262Editar: un error se deslizó después de una de las ediciones recientes, causando resultados incorrectos para tableros vacíos (el resultado del conjunto de pruebas estuvo bien). Dado que
Round 0
en un formato de salida dado solo puede significar que puede haber tableros vacíos en la entrada (aunque ninguno está en el conjunto de pruebas), el error tuvo que repararse. La solución rápida significaba un aumento en el recuento de bytes (en 1, en realidad), no es una opción, por supuesto. Por lo tanto, tuve que jugar al golf un poco más.Ejecutar con
-p
(+1 agregado al recuento), lecturas de STDIN. Requiere 5.014 debido alr
modificador de sustitución.es decir
fuente
perl -p x.pl < input.txt
si los datos están en un archivo, o si seperl -p x.pl
alimentan línea por línea para probar una sola entrada (terminar conctrl-D
(ctrl-Z
)). Recuerde verificar su perl es5.014
o más reciente.1 \n o
entrada.C # - 1164 caracteres
Esta es mi primera participación en code-golf, así que por favor sea indulgente ;-)
Lo sé, estoy lejos de los mejores resultados, por cierto, ¡realmente increíble!
Pero pensé que compartiría mi solución en C # de todos modos.
Solo las directivas de uso ya cuentan 97 caracteres, así que creo que va a ser bastante difícil lograr el resto en menos de 200 caracteres.
Es un enfoque bastante iterativo, que utiliza LINQ en muchos lugares. También incluí la descarga del archivo de entrada y la escritura del archivo de salida en el código.
Aquí hay una versión un poco más legible:
fuente
J - 275 char
¡Oh, todas estas especificaciones de E / S! Una puntuación tan vergonzosamente grande para J, al final. Toma información en STDIN con una nueva línea final y asume que no hay ningún retorno de carro (
\r
) en la entrada. Aquí está el resultado de aplicarlo al archivo de entrada de muestra en la pregunta.Ungolfed: (puedo agregar una explicación más completa y amigable para los novatos más tarde).
La
$:
parte hace que el cuerpo principal recurra sobre la entrada (una forma terriblemente inconveniente para que J analice), aplicando la@
cadena de margaritas sobre cada sección.nlines
encuentra el número de líneas para el próximo tablero.La acción en cada tablero (
evolvex
) es clara:iterate
(llamadaa
en el golf) construye una lista de cada iteración de la simulación hasta que alcanzamos algo visto antes o demasiados pasos. Luegopercent@,.
calcula el porcentaje de cuadrado lleno en cada resultado yformat
ejecuta algunas estadísticas (stat
llamadast
en el campo de golf) para descubrir cómo terminó la simulación, qué porcentaje fue el mayor, y así sucesivamente, antes de formatear todo eso en una cadena.Finalmente,
}:
se ocupa de un poco de basura antes de; joinln
unir todas las salidas de la placa individual en una cadena separada por una nueva línea.fuente
jconsole golf.ijs < input.txt
.v
como nombre, que por cualquier razón no está permitido en los scripts. (Había estado ejecutando el fragmento en el REPL.) Cambiarloa
parece funcionar.