Hay un virus dentro de un receptor de 5x5. Como sabemos cómo propaga su contaminación, su misión es generar la última etapa de la contaminación.
El recipiente
Se representará como una matriz bidimensional de 5x5:
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
Donde 1
significa una posición donde el virus ya se ha contaminado, y0
una posición no contaminada.
Cómo se propaga el virus
- Una posición contaminada no puede estar limpia.
- Una posición limpia se contaminará en la siguiente etapa solo si al menos dos de sus posiciones adyacentes (celdas norte, este, sur y oeste) están contaminadas.
- La última etapa de la contaminación ocurre cuando no se pueden contaminar más células limpias.
Muestra
Utilizando como la etapa 1 de la contaminación el receptor descrito anteriormente, la etapa 2 será:
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
La etapa 3 de la contaminación será:
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
La etapa 4 de la contaminación será:
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Y la etapa 5 (en este ejemplo, la última) será:
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
Desafío
Dada como entrada una etapa de la contaminación, debe dar salida a la última etapa de la contaminación.
Se le permite escribir un programa completo o una función. Puede tomar la entrada como matriz / lista, como números separados o incluso como cadena. Elige la mejor manera que se adapte a tu idioma.
¡La respuesta más corta en bytes gana!
Otros casos de prueba
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1
Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0
Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
fuente
1 0 1
ocurrir en la salida? ¿No es el centro cero adyacente a dos1
s?1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0
como un caso de prueba?0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0
, que se mantiene sin cambios.Respuestas:
Como básicamente se trata de un autómata celular, te doy ...
Regla Golly Quicklife, 10 bytes
Ingrese la regla, pegue la cuadrícula en Golly, ejecute el patrón. El patrón resultante es la salida.
Explicación:
O si insiste en una regla completa de RuleLoader, 89 bytes:
Rulename es X, los mismos pasos que antes.
fuente
B3/S23
qué puede hacer cualquier cosa! ... Pero tiene un formato de entrada estricto (como todo el programa está incluido en la entrada (¿de qué otra forma lo haría?)). ¿Pero por qué arruinar la diversión?Python 2, 97 bytes
Pruébalo en línea . La entrada se toma como una cadena entre comillas con cada fila delimitada por nuevas líneas. El
980
no es óptimo y puede reemplazarse con un múltiplo inferior de 35. Como no tiene impacto en la duración de este programa, he dejado la determinación del límite superior seguro más bajo como ejercicio para el lector.fuente
Javascript (ES6),
918987 bytesComo una función que acepta la entrada como una matriz de números o cadenas.
-2 bytes de Neil (combinación de asignación de
y
con conversión de cadena)-2 bytes (eliminando la variable
j
)fuente
(y=...)+''==x
lugar de(y=...),y+''==x
.MATL , 22 bytes
Esto funciona en la versión actual (15.0.0) del lenguaje.
Pruébalo en línea !
El formato de entrada es: matriz 2D con filas separadas por punto y coma. Entonces los cuatro casos de prueba tienen las siguientes entradas:
Explicación
Esto realiza repetidamente una convolución 2D de la matriz de entrada con la siguiente máscara, que define qué vecinos cuentan como contaminantes:
Para obtener un resultado del mismo tamaño que la matriz original, primero se rellena con un marco de ceros y luego solo se mantiene la parte "válida" de la convolución (es decir, sin efectos de borde).
Se aplica un umbral de 2 a la salida de la convolución, y el resultado se ORE por elementos con la entrada original.
Esto debe hacerse un número suficiente de veces para garantizar que se haya alcanzado el estado final. Un criterio simple que cumple esto es: iterar tantas veces como el número de entradas en la matriz de entrada (es decir, 25 veces en los casos de prueba).
fuente
TI-BASIC, 151 bytes
Ingresar como
[[1,0,0,1,1][1,0,0,0,0]...]
.fuente
Repeat
bucle.Lua, 236 bytes
Acepta entradas en la línea de comandos y usa la manipulación de cadenas de Lua para obtener la respuesta.
Sin golf:
fuente
APL,
767270 bytesLo que esto hace es: expandir la matriz a 7x7, luego centrar nuestro argumento (omega). A partir de esta matriz, genere 4 matrices "secundarias", cada una desplazada en una dirección diferente (arriba / abajo / izquierda / derecha), agréguelas (para obtener el número de vecinos), suelte el marco (para volver a un Matriz 5x5). O esta nueva matriz con la "antigua", para asegurarnos de que no hayamos soltado ninguna celda en el proceso (es decir, en el borde). Luego, use la
⍣≡
combinación para llegar a un valor de punto fijo.ejemplo (considerando que la función fue asignada a
contaminate
):fuente