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 Avon kBits definiert, die eine Fehlerlinie darstellen, auf der Erdbeben auftreten können. Das Array wird an den Rändern herumgewickelt. Die Bedingung A[i] = 0bedeutet , dass Position iist entspannt , und A[i] = 1bedeutet , 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 1Bit ist, wird ein Ohrbeben der Stärke 1 ausgelöst und das Bit 0erneut 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 1s 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 kund t, und Ihre Aufgabe ist es, den zufälligen tDominoautomaten kfür Zeitschritte zu simulieren , ausgehend von einem anfänglichen Längenarray aller 0s. Ihre Ausgabe soll eine Liste Lvon kganzen 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 = 15und t = 1000sind 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.