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 Ade kbits, 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] = 0significa que la posición iestá relajada y A[i] = 1significa 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 0nuevo 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 1s 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 ky t, y su tarea es simular el autómata de dominó aleatorio para tpasos de tiempo, comenzando desde una kmatriz de longitud inicial de todos los 0s. Su salida será una lista Lde kenteros, donde L[i](con indexación basada en 1) contiene el número de terremotos de magnitud ique ocurrieron durante la simulación. Se le permite eliminar los ceros finales de la salida.
Para las entradas k = 15y 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.

Respuestas:
Pyth, 48 bytes
Me inspiré un poco en la explicación de @ Dennis. Tuve algunos pensamientos similares ayer, pero realmente no los seguí.
Pruébelo en línea: demostración
Explicación:
fuente
CJam,
5755 bytesEsta es una función anónima que saca k y t de la pila ( k encima de t ) y deja la matriz deseada a cambio.
Pruébelo en línea en intérprete de CJam .
Cómo funciona
fuente
Python 2, 153 bytes
Resulta que tenía casi la misma solución que la de Fry , pero con un poco más de violín.
fuente
randrange, pero no me di cuenta de que funcionaba con un solo argumento. ¡Buen trabajo!Java,
278272 bytesJava no es el mejor lenguaje de golf, y no soy el mejor golfista, pero fue muy divertido escribir, ¡así que aquí está! ¡Avísame sobre errores y mejoras! (Decidí volver a enviarlo solo como una función).
Y el archivo con espacios y comentarios:
fuente
Alt+09od[q]+=1;Esto puede convertirse end[q]++;un incremento directo en las matrices en lugar de usar + = en todas partes. Eso debería salvar a un montón de personajes.for(;t>0;t--){se puede cambiar afor(;t-->0;){: DPitón 2,
174170Gracias @Vioz por encontrar una forma más corta de hacer
Dy probar de nuevo quenotgeneralmente es golfable. Y también por escribir la explicación.Intenté hacer un programa similar en Pyth, pero parece haber un problema de alcance en lo que estaba tratando de hacer. Esto implementa ingenuamente las fichas de dominó y la función
Upropaga terremotos. La dirección de restaUno necesita un mod porque se envolverá naturalmente. El último elemento deEcuenta el número de veces que un cero se convierte en uno, por lo que no se imprime al final.Ungolfed + Explicación:
fuente
D[r]=not eparaD[r]=e<1guardar 2 bytes, yE=[0]*-~kparaE=D+[0]guardar otros 2, para llegar a 170.ES6,
224196189179172Las cosas fáciles se han jugado al golf, pero aún queda mucho trabajo por hacer. Escribiré una explicación más tarde. Además, si alguien puede decirme por qué la
new Date%kcosa corta ya no funciona tan bien, sería genial.El uso es
fuente
new. No necesita esoten el ciclo for, no necesita los dos últimos;a[r]^=1defs trabajará si el valor inicial es1o0Perl, 212
La versión anterior que había publicado no se ajustaba correctamente, y su implementación tomó algo de trabajo.
Probablemente este no sea el algoritmo correcto para esto, pero no puedo pensar en este momento. La versión sin golf es la siguiente.
Sin golf:
fuente
CJam, 76 bytes
Bueno, esto no es muy competitivo. Pero como me llevó bastante tiempo, pensé en publicarlo de todos modos.
Pruébalo en línea
fuente