Antecedentes
El Random Domino Automaton es un modelo de juguete para terremotos, inspirado en autómatas celulares. En este desafío, su tarea es simular una versión simplificada de este modelo y recopilar datos de él.
El autómata se define en una matriz A
de k
bits, que representa una línea de falla en la cual pueden ocurrir terremotos. La matriz se envuelve en sus bordes. La condición A[i] = 0
significa que la posición i
está relajada y A[i] = 1
significa que está excitada o que contiene energía almacenada. En cada paso de tiempo, se elige una posición de la matriz de manera uniforme al azar. Si esa posición se relaja, se excita (se agrega energía potencial al sistema). Si esa posición ya está excitada, desencadena un terremoto, y la posición elegida y todas las posiciones excitadas conectadas a ella se relajan nuevamente. El número de posiciones excitadas que se relajan es la magnitud del terremoto.
Ejemplo
Considera la matriz
100101110111
de longitud 12. Si el proceso aleatorio elige el segundo bit desde la izquierda, la matriz se actualiza a
110101110111
^
ya que el bit elegido (marcado con ^
) era 0
. Si luego elegimos el cuarto bit de la izquierda, que es un aislado 1
, se activa un terremoto de magnitud 1, y el bit se establece de 0
nuevo en:
110001110111
^
A continuación, podríamos elegir el segundo bit de la derecha, que desencadena un terremoto de magnitud 5:
000001110000
^
Tenga en cuenta que todos los 1
s en el mismo "clúster" que el elegido fueron parte del terremoto, y la matriz se envuelve en el borde.
La tarea
Deberá tomar como entradas dos enteros positivos k
y t
, y su tarea es simular el autómata de dominó aleatorio para t
pasos de tiempo, comenzando desde una k
matriz de longitud inicial de todos los 0
s. Su salida será una lista L
de k
enteros, donde L[i]
(con indexación basada en 1) contiene el número de terremotos de magnitud i
que ocurrieron durante la simulación. Se le permite eliminar los ceros finales de la salida.
Para las entradas k = 15
y t = 1000
, algunas salidas representativas son
[117, 97, 45, 26, 10, 5, 3, 1, 3, 0, 0, 0, 0, 0, 0]
[135, 91, 58, 21, 8, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0]
[142, 63, 51, 31, 17, 4, 2, 1, 1, 0, 0, 0, 0, 0, 0]
[106, 75, 45, 30, 16, 8, 5, 2, 2, 0, 0, 0, 0, 0, 0]
[111, 96, 61, 22, 3, 8, 3, 2, 0, 0, 0, 1, 0, 0, 0]
Reglas
Se permiten tanto programas completos como funciones. El conteo de bytes más corto gana, y las lagunas estándar no se permiten.
Tenga en cuenta que no es necesario que simule el autómata utilizando una implementación particular, solo importa la salida.