fundo
O Random Domino Automaton é um modelo de brinquedo para terremotos, inspirado em autômatos celulares. Nesse desafio, sua tarefa é simular uma versão simplificada desse modelo e coletar dados dele.
O autômato é definido em uma matriz A
de k
bits, representando uma linha de falha na qual terremotos podem ocorrer. A matriz envolve suas bordas. A condição A[i] = 0
significa que a posição i
está relaxada e A[i] = 1
significa que está excitada ou contém energia armazenada. Em cada etapa do tempo, uma posição da matriz é escolhida uniformemente aleatoriamente. Se essa posição estiver relaxada, ela ficará excitada (energia potencial é adicionada ao sistema). Se essa posição já estiver excitada, desencadeia um terremoto, e a posição escolhida e todas as posições excitadas conectadas a ela são relaxadas novamente. O número de posições excitadas que ficam relaxadas é a magnitude do terremoto.
Exemplo
Considere a matriz
100101110111
12. Se o processo aleatório escolher o segundo bit da esquerda, a matriz será atualizada para
110101110111
^
desde que o bit escolhido (marcado com ^
) foi 0
. Se, em seguida, escolhermos o quarto bit da esquerda, que é um isolado 1
, um terremoto de magnitude 1 é acionado e o bit é definido 0
novamente:
110001110111
^
Em seguida, podemos escolher o segundo bit da direita, o que desencadeia um terremoto de magnitude 5:
000001110000
^
Observe que todos os 1
s no mesmo "aglomerado" que o escolhido foram parte do terremoto, e a matriz se envolve na borda.
A tarefa
Você deve tomar como entrada dois números inteiros positivos k
e t
, e sua tarefa é simular o autômato aleatório do dominó para t
intervalos de tempo, iniciando a partir de uma k
matriz de comprimento inicial de todos os 0
s. Sua saída deve ser uma lista L
de k
números inteiros, onde L[i]
(com indexação baseada em 1) contém o número de terremotos de magnitude i
que ocorreram durante a simulação. Você tem permissão para eliminar zeros à direita da saída.
Para as entradas k = 15
e t = 1000
, algumas saídas representativas são
[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]
Regras
Programas e funções completos são permitidos. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Observe que você não precisa simular o autômato usando uma implementação específica, apenas a saída é importante.