Blog

Advent of Code, Tag 12: Auf den Mond schießen

Adé Mochtar

Aktualisiert Oktober 21, 2025
5 Minuten

Ich werde nicht lügen. Normalerweise bin ich nicht der wettbewerbsfreudigste Mensch da draußen. Aber wenn der Dezember näher rückt, werde ich ein bisschen unruhig. Und wenn ich Mitspieler aus dem letzten Jahr treffe, dreht sich das Gespräch schnell um die kommende Saison von Advent of Code. "Werden Sie dieses Jahr wieder mitmachen?", "Haben Sie schon mit den Vorbereitungen begonnen?", "Welche Sprache werden Sie verwenden?" oder "Werden Sie dieses Jahr wieder um die Spitzenposition kämpfen?" sind nur einige der Fragen, die gestellt werden.

Freundlicher Wettbewerb

Ja, da steht 5:55 Uhr morgens...

2016 war das erste Jahr, in dem ich in Echtzeit teilgenommen habe. Obwohl ich erst am 6. Tag begann, schaffte ich es auf unserer privaten Rangliste auf einen respektablen 2. Ich muss zugeben, dass die Konkurrenz damals noch nicht so stark war. Wenn man alle Herausforderungen absolvierte, landete man schon in der Nähe der Spitze.

Dann kam die Ausgabe 2017. Im Büro herrschte noch mehr Aufregung darum. Mehr Spieler meldeten sich für die private Rangliste an, und ich stellte mir sogar einen Wecker auf 5:55 Uhr, um sicherzustellen, dass ich maximale Chancen auf ein gutes Ergebnis habe (und ich bin nicht der Einzige). Und es hat geklappt! Ich habe den ersten Platz belegt! Zugegeben, es mag geholfen haben, dass ich in Elternzeit war und wahrscheinlich etwas mehr Zeit zur Verfügung hatte als meine Konkurrenten. Aber ein Sieg ist ein Sieg, und ich habe es sogar geschafft, Punkte für die globale Rangliste zu sammeln. Das war ein gutes Gefühl! Vielleicht habe ich ja doch eine wettbewerbsorientierte Seite.

Im Jahr 2018 war der Wettbewerb noch härter. Mehr Leute standen vor 6:00 Uhr auf und der interne Slack-Kanal war aktiver als je zuvor. Die Leute verglichen Lösungen und Ausführungszeiten und hatten insgesamt eine Menge Spaß. Nach dem 24. Tag gab es einen Dreikampf um die Spitzenposition. Bulat, Marcus und ich hatten alle 1852 Punkte. Es kam also auf den letzten Tag an. Bulat löste Tag 25 am schnellsten, und obwohl ich auf dem zweiten Platz landete, hatten wir viel Spaß!

So nah

Rangliste der Stars

Aber wettbewerbsorientiert zu sein, bedeutet auch, dass Sie neugierig sind, wie Sie im Vergleich zu Ihren Mitspielern abschneiden. Die Rangliste zeigt Ihnen jedoch nur die Gesamtpunktzahl auf der privaten Rangliste, der globalen Rangliste oder die Gesamtzahl der erworbenen Sterne an. Das gibt Ihnen nicht wirklich Aufschluss darüber, wie Sie sich im Laufe der Zeit schlagen...

Glücklicherweise gibt es auch eine API. Damit erhalten Sie die Zeiten jedes Sterns, der von jedem Mitglied auf einer privaten Bestenliste erworben wurde. Damit müssen wir doch etwas anfangen können, oder? Inspiriert von einem Beitrag über die Erstellung von F1-Rundendiagrammen mit d3.js habe ich 2017 damit begonnen, etwas Python und Javascript zusammenzuhacken, um das Leaderboard json zu parsen und ein "Rundendiagramm" für Advent of Code zu erstellen. Das Ergebnis ist die unten stehende Grafik.

Ranking

Die Aktualisierung der Tabelle war allerdings viel Handarbeit, also habe ich die Python-Skripte in Javascript umgewandelt und eine Browser-Erweiterung daraus gemacht. Ich habe in diesem Jahr noch ein paar kleine Funktionen hinzugefügt, z.B. eine Sortierung nach Punkten pro Tag. Die Erweiterung ist für Chrome und Firefox verfügbar, oder auf Github. Und wenn Sie unsere Bestenliste 2018 sehen möchten, verwende ich sie als interaktives Beispiel. Ja, ich bin Benutzer #35801.

Bis zum Mond und zurück

Bei der heutigen Aufgabe ging es darum, die Monde des Jupiters zu verfolgen. Der erste Teil war ziemlich einfach: Sie sollten nur 4 Objekte über eine begrenzte Anzahl von Iterationen verfolgen. Anfang der Woche sagte ich zu einem Kollegen: "Warten Sie nur, bis er [Eric Wastl] Sie dazu bringt, eine Billion Iterationen zu machen". Ich habe mich geirrt. Und zwar nicht nur um eins, sondern fast um den Faktor 400!

$ time pypy3 part2.py
Steps: 3.9E+14
pypy3 part2.py  0.28s user 0.03s system 94% cpu 0.323 total

Glücklicherweise ist Python nicht so langsam, wie manche Sie glauben machen wollen. 390 Billionen Schritte in nur 0,323s Sekunden. Damit habe ich heute den ersten Platz belegt :)

Advent des Codes 2019 Serie

Verfasst von

Adé Mochtar

Contact

Let’s discuss how we can support your journey.