Hintergrund
Der Random Domino Automaton ist ein Spielzeugmodell für Erdbeben, das von zellularen Automaten inspiriert wurde. In dieser Herausforderung besteht Ihre Aufgabe darin, eine vereinfachte Version dieses Modells zu simulieren und Daten daraus zu sammeln.
Der Automat ist auf einer Reihe A
von k
Bits definiert, die eine Fehlerlinie darstellen, auf der Erdbeben auftreten können. Das Array wird an den Rändern herumgewickelt. Die Bedingung A[i] = 0
bedeutet , dass Position i
ist entspannt , und A[i] = 1
bedeutet , dass es erregt , oder enthält Energie gespeichert. Zu jedem Zeitschritt wird eine Position des Arrays gleichmäßig zufällig ausgewählt. Wenn diese Position entspannt ist, wird sie angeregt (dem System wird potentielle Energie hinzugefügt). Wenn diese Position bereits angeregt ist, wird ein Erdbeben ausgelöst, und die ausgewählte Position und alle damit verbundenen angeregten Positionen werden wieder entspannt. Die Anzahl der angeregten Positionen, die sich entspannen, ist die Stärke des Erdbebens.
Beispiel
Betrachten Sie das Array
100101110111
der Länge 12. Wenn der Zufallsprozess das zweite Bit von links auswählt, wird das Array auf aktualisiert
110101110111
^
da das gewählte bit (markiert mit ^
) war 0
. Wenn wir als nächstes das vierte Bit von links auswählen, das ein isoliertes 1
Bit ist, wird ein Ohrbeben der Stärke 1 ausgelöst und das Bit 0
erneut auf gesetzt:
110001110111
^
Als nächstes können wir das zweite Bit von rechts auswählen, das ein Erdbeben der Stärke 5 auslöst:
000001110000
^
Beachten Sie, dass alle 1
s in demselben "Cluster" wie der ausgewählte Teil des Bebens waren und das Array an der Grenze herumläuft.
Die Aufgabe
Als Eingabe nehmen Sie zwei positive ganze Zahlen k
und t
, und Ihre Aufgabe ist es, den zufälligen t
Dominoautomaten k
für Zeitschritte zu simulieren , ausgehend von einem anfänglichen Längenarray aller 0
s. Ihre Ausgabe soll eine Liste L
von k
ganzen Zahlen sein, wobei L[i]
(mit 1-basierter Indizierung) die Anzahl der Erdbeben der Stärke enthält i
, die während der Simulation aufgetreten sind. Sie dürfen nachgestellte Nullen aus der Ausgabe entfernen.
Für die Eingänge k = 15
und t = 1000
sind einige repräsentative Ausgänge
[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]
Regeln
Es sind sowohl vollständige Programme als auch Funktionen zulässig. Die kürzeste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Beachten Sie, dass Sie den Automaten nicht mit einer bestimmten Implementierung simulieren müssen, sondern nur die Ausgabe.