Como mañana es el 4 de mayo, aquí hay una pequeña publicación temática de Star Wars para prepararte mentalmente para todos los chistes malos que vendrán mañana.
TRASFONDO
Durante una sesión del senado galáctico, todos los senadores están sentados en una n*n
cuadrícula. Un brote repentino de gripe JarJar (que dura para siempre y hace que los infectados hablen como JarJar Binks) hace que algunos de los senadores se infecten.
Aquí hay un ejemplo con una 6*6
cuadrícula donde X
están los senadores infectados, la lista correspondiente es [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[0,5]]
:
Después de eso, la infección comienza a extenderse paso a paso. Dos senadores son adyacentes si comparten un borde completo en la cuadrícula (es decir, arriba, abajo, derecha, izquierda), lo que significa que excluimos las diagonales.
Podemos concluir que un senador puede ser adyacente a 2,3 o 4 otros senadores y reclamar las siguientes reglas para la infección:
- Un senador que ha sido infectado permanece infectado para siempre.
- Un senador se infecta en un paso si estaba adyacente a 2 o más senadores infectados en el paso anterior
Aquí hay un ejemplo con la cuadrícula anterior que muestra los 2 primeros pasos de la infección:
Después de los siguientes pasos, todo el Senado se infectará.
TU TAREA
Su código no necesita manejar entradas inválidas como una lista mayor n*n
o coordenadas que no son distintivas.
Su código tomará como entrada una lista de pares de enteros (o una cuadrícula binaria o cualquier otro formato que se adapte a su idioma) y un entero n
(que puede ser innecesario si usa otro formato que no sea una lista), por ejemplo:
8 [[1,2],[1,1],[7,4],[2,7],[4,3]]
n es el lado de la cuadrícula, lo que significa que la cuadrícula será una * n cuadrícula, y la lista de pares de enteros son las coordenadas de las celdas de los senadores infectados inicialmente.
La parte inferior izquierda de la cuadrícula es [0,0] y la parte superior derecha es [n-1, n-1]. La esquina superior izquierda es [0, n-1].
Su código debe generar un número entero:
-1
o un valor falso o un error si la cuadrícula completa nunca se infectará totalmente o el número mínimo de pasos necesarios para infectar toda la cuadrícula
Casos de prueba
6 [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[5,0]] => 7
4 [[1,1][0,3][1,0][3,0][3,3]] => 9
Recuerde que esto es código golf , por lo tanto, ¡la respuesta más corta en bytes gana!
n
? ¿Hay un valor máximo?CellularAutomaton
...Respuestas:
MATL,
2928 bytesLa entrada tiene la forma de una matriz 2D de 1 y 0
Pruébalo en MATL Online
Explicación
fuente
tn:"tlY6Z+1>Z|t?x@D.]]N?xl_
? (No he probado mucho). Si todos los elementos son 1 en algún momento, muestre el índice del bucle de inmediato y elimine la pila. Al final del ciclo, si la pila no está vacía, elimine y presione-1
APL (Dyalog 16.0), 54 caracteres o 60 bytes
Toma la matriz adjunta como argumento, devuelve el número de paso que completa la infección, es decir, 1 = ya está completamente infectado. 0 = no se extiende completamente, que es solo 1 + los números del OP.
54 caracteres (Unicode):
60 bytes (clásico):
⌺
es equivalente a⎕U233A
Ejecución de ejemplos:
Los pasos son los siguientes:
fuente
Pyth , 49 bytes
Banco de pruebas .
Utiliza 1 indexación para la salida.
fuente
Python, 231 bytes
Provoca un error si no es posible.
Pruébalo en línea!
fuente
0/0
guarda dos bytes deraise
. Tal vez1/(g!=h)
funcionaría? (entonces todowhile
podría estar en línea también).q=lambda r,c:g[r][c]if(0<=r<m)*(0<=c<m)else 0
ahorra 12. Se puede quitar el espacio entre (a)1
yfor
(b)]
yfor
también.JavaScript (ES6), 132 bytes
Donde
\n
representa el carácter de nueva línea literal. Toma de entrada como una cadena de0
s y1
s en una matriz de nueva línea delimitado. DevuelveNaN
si la cuadrícula nunca se infectará por completo.fuente