Advent of Code 2020 — Tag 9

Categories Allgemein

Etwas verspätet jetzt also der Blogpost zu Tag 9. Der ging mir wieder relativ leicht von der Hand, es ging um die sogenannte XMAS-Verschlüsselung. Das Problem war nur, dass diese Verschlüsselung unsicher ist. Tja, das ist ja doof. Habe ich mal erwähnt, dass ich die kleine Geschichte, die der AoC jedes Jahr erzählt, einfach schön finde?

Dieses Jahr wollen wir einfach nur Urlaub machen. Aber was macht man, wenn man im Flugzeug Langeweile bekommt? Na klar: Den Computer mithilfe von Büroklammern mit der offenen Buchse im Sitz vor uns verbinden und einfach mal schauen, was da so rauskommt:

Es kommt eine lange Liste von Zahlen und jede lässt sich aus der Summe von zwei aus den 25 vorherigen berechnen. In der ersten Teilaufgabe ging es darum, die erste Zahl zu finden, auf die das genau nicht zutrifft. Ich habe das gefühlt wieder mit dem Holzhammer gemacht: Ich habe einfach alle möglichen Summen aus den vorherigen 25 Werten berechnet und geschaut, ob der gesuchte Wert darunter ist. Wenn ja, ist ja alles gut, wenn nicht: Dann habe ich meine erste, ungültige Zahl gefunden. Und so ging ich dann einfach die Liste durch und überprüfte somit jeden Wert. Auch hier haben mir wieder Tests geholfen.

Bei der zweiten Teilaufgabe ging es dann darum, die Verschlüsselung zu brechen. Um ehrlich zu sein, habe ich bisher nicht verstanden, wie die Lösung die Verschlüsselung brechen soll. Aber das macht nichts, die Aufgabenstellung war relativ klar: Es ist eine Reihe von Zahlen gesucht, die hintereinander in der Liste stehen und addiert die ungültige Zahl ergeben. Dann noch ein bisschen Multiplikation und fertig.

Meine Lösung sieht so aus, dass ich mir mittels Slicing alle möglichen Reihen von mindestens zwei zusammenhängenden Zahlen generiere und dann einfach überprüfe, ob die summiert die ungültige Zahl ergeben. Problem gelöst, zweiten Sterne abgegriffen und die Aufgaben so schnell wie noch nie gelöst: 14 Sekunden schneller als meine bisherige Bestzeit dieses Jahr:

      --------Part 1--------   --------Part 2--------
Day       Time   Rank  Score       Time   Rank  Score
  9   01:46:54  11717      0   02:27:16  12091      0
  8   01:52:11  12231      0   16:15:48  36195      0
  7   02:07:01   9132      0   03:12:16   9145      0
  6   04:00:18  18947      0   04:16:22  17701      0
  5   02:13:00  11721      0   02:27:30  11386      0
  4   11:45:01  44296      0   12:23:03  35795      0
  3       >24h  68334      0       >24h  66159      0
  2   14:20:28  55832      0   14:35:42  53614      0
  1   12:34:34  46457      0   12:38:30  42454      0

Das hat mich selbst ein bisschen überrascht.

Wie üblich gibt’s meine Lösung wieder auf Github.