Heim >Backend-Entwicklung >Python-Tutorial >Advent of Code Day: Toilettenschanze
Link zur Lösung
Roboterbewegung simulieren:
Die Simulation beginnt mit der Analyse der Roboterdaten, einschließlich der Anfangspositionen und Geschwindigkeiten der Roboter. Die Daten jedes Roboters werden als Tupel (p_x, p_y, v_x, v_y) dargestellt – Positions- und Geschwindigkeitskomponenten entlang der x- und y-Achse.
Die Simulationsfunktion berechnet die neuen Positionen der Roboter nach t Sekunden anhand der Formel:
p_x = (p_x + t * v_x) % width p_y = (p_y + t * v_y) % height
Diese Formel berücksichtigt die Bewegung des Roboters, aktualisiert seine Position bei jedem Zeitschritt und umschließt das Gitter, wenn er über die Kanten hinausgeht (aufgrund der Modulo-Operation). Die Roboter werden dann wieder an den aktualisierten Positionen im Raster platziert.
Quadrantenzählung:
Nach der Simulation der Roboter bei t = 100 zählt der Code die Anzahl der Roboter in jedem der vier Quadranten des Gitters. Das Raster ist basierend auf middle_row_gap und middle_column_gap in Quadranten unterteilt, die jeweils als die Hälfte der Breite und Höhe des Rasters berechnet werden.
Für die Position jedes Roboters (x, y) prüft das Programm nach 100 Sekunden, welchen Quadranten der Roboter einnimmt:
Wir erhalten dann einfach das Produkt der Gesamtsummen der 4 Quadranten mit der Funktion Math.prod().
Ich habe bei dieser Aufgabe einige Annahmen getroffen, zum Beispiel würde das erzeugte Bild in der Mitte / zentralisiert sein. Während sie eine Form erstellen, müssen die Roboter alle zusammengefügt werden – um den Baum zu bilden.
Die Roboter bewegen sich auf vorhersehbare Weise und ihre Positionen können im Laufe der Zeit bestimmte Formen annehmen. Um das „Weihnachtsbaum“-Muster zu erkennen, sucht das Programm nach dem Zeitpunkt, an dem sich die Roboter zu einer dichten Formation zusammenschließen, die der Form eines Baumes ähnelt. Der Ansatz konzentriert sich darauf, herauszufinden, wann sich die Roboter in einem bestimmten Bereich des Rasters versammeln.
Das Programm beginnt mit der Definition eines großen Begrenzungsrahmens um alle Roboter. Diese Box wird im Laufe der Zeit immer kleiner. Die Idee ist, dass sich die Roboter im Laufe der Zeit zu einer kleineren Region zusammenschließen.
Für jeden Zeitschritt (jede Position der Roboter) berechnet das Programm, wie viele Roboter sich in dieser Schrumpfbox befinden. Es misst die Dichte, also die Anzahl der Roboter in der Box geteilt durch die Fläche der Box. Je mehr Roboter sich in der Box befinden, desto höher ist die Dichte.
Das Programm verfolgt den Zeitpunkt, zu dem die Dichte am höchsten ist. Wenn die Dichte maximal ist, sind die Roboter am dichtesten gepackt, und das ist wahrscheinlich dann der Fall, wenn sie eine erkennbare Form (den Weihnachtsbaum) bilden.
Die Methode funktioniert, weil ein „Weihnachtsbaum“-Muster dazu führen würde, dass sich die Roboter in einem bestimmten Bereich des Gitters ansammeln. Durch Verkleinern des Begrenzungsrahmens und Berechnen der Roboterdichte in diesem Bereich kann das Programm erkennen, wann die Roboter diese kompakte Form bilden. Die höchste Dichte gibt an, dass die Roboter am engsten gruppiert sind, was der Weihnachtsbaumformation entspricht.
Der Zeitschritt mit der höchsten Dichte ist also, wenn die Roboter das Weihnachtsbaummuster erstellen.
Wie immer können Sie uns gerne auf Twitter erreichen und chatten
Das obige ist der detaillierte Inhalt vonAdvent of Code Day: Toilettenschanze. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!