tło
Losowe Domino Automat jest model zabawka dla trzęsień ziemi, zainspirowany automatów komórkowych. W tym wyzwaniu Twoim zadaniem jest symulacja uproszczonej wersji tego modelu i zbieranie z niego danych.
Automat jest zdefiniowana w tablicy A
z k
bitów, co stanowi linię podziału, w którym może występować trzęsienia ziemi. Tablica owija się wokół swoich granic. Warunek A[i] = 0
oznacza, że pozycja i
jest zrelaksowana i A[i] = 1
oznacza, że jest podekscytowana lub zawiera zmagazynowaną energię. Na każdym kroku czasowym jedna pozycja tablicy jest wybierana losowo równomiernie. Jeśli ta pozycja jest rozluźniona, staje się podekscytowana (energia potencjalna jest dodawana do systemu). Jeśli ta pozycja jest już podekscytowana, powoduje trzęsienie ziemi, a wybrana pozycja i wszystkie powiązane z nią podekscytowane pozycje są ponownie rozluźnione. Liczba podekscytowanych pozycji, które się rozluźniają, jest wielkością trzęsienia ziemi.
Przykład
Rozważ tablicę
100101110111
o długości 12. Jeśli losowy proces wybierze drugi bit od lewej, tablica zostanie zaktualizowana do
110101110111
^
ponieważ wybrany bit (oznaczony ^
) był 0
. Jeśli następnie wybierzemy czwarty bit od lewej, który jest izolowany 1
, nastąpi trzęsienie ziemi o sile 1 i bit zostanie 0
ponownie ustawiony :
110001110111
^
Następnie możemy wybrać drugi bit z prawej strony, co powoduje trzęsienie ziemi o sile 5:
000001110000
^
Zauważ, że wszystkie 1
s w tej samej „grupie” co wybrana były częścią trzęsienia, a tablica owija się wokół granicy.
Zadanie
Weźmiesz jako wejścia dwie liczby całkowite dodatnie k
a t
, a twoim zadaniem jest symulacja losowy domina automat do t
kroków czasowych, począwszy od początkowego wzdłużnych k
tablicy wszystkich 0
s. Jego wynik będzie lista L
z k
liczb całkowitych, gdzie L[i]
(z indeksowaniem 1-based) zawiera liczbę trzęsień ziemi wielkości i
, które wystąpiły w trakcie symulacji. Możesz usunąć końcowe zera z danych wyjściowych.
Dla danych wejściowych k = 15
i t = 1000
niektórych reprezentatywnych danych wyjściowych są
[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]
Zasady
Dozwolone są zarówno pełne programy, jak i funkcje. Wygrywa najkrótsza liczba bajtów, a standardowe luki są niedozwolone.
Zauważ, że nie musisz symulować automatu przy użyciu żadnej konkretnej implementacji, liczy się tylko wynik.