Tag 8? Jetzt ist Massimo komplett durcheinander. Nicht direkt. Ich war am Wochenende komplett nicht zu gebrauchen und habe es kränkelnd im Bett verbracht. An Freitag habe ich es jedoch nicht geschafft den Tag abzuschließen. Heute habe ich dafür Tag 8 beendet und Tag 9 auch. Aber dazu morgen mehr.
Tag 8 hat mir sehr viel beigebracht. Ich habe mich in den letzten Beiträgen ja immer wieder wegen der umständlichen Stringverarbeitung beschwert. Auf der Suche nach einer besseren Lösung bin ich auf diesen Medium Artikel gestoßen. Und ich frage mich, warum ich nicht schon früher danach gesucht habe. Das ist der ganze Zauber.
line := strings.FieldsFunc(x, func(r rune) bool {
if r == '=' || r == '(' || r == ')' || r == ',' || r == ' ' {
return true
}
return false
})
Und während Teil 1 wieder durch eine einfache Iteration zu lösen war, so scheiterte diese Lösung bei Teil 2. Trotz dass das Programm 10 Millionen Iterationen in 3 Sekunden duchfürht reicht es nicht aus Da hilft also nur Mathematik. Und so musste ich mein Wissen über den kleinsten gemeinsame Multiplikator und größten gemeinsamen Teiler wieder auffrischen.
Tag 8 war knackig hat aber echt Spaß gemacht.
Und falls ihr euch anschließen wollt. Hier der Einladungscode zu meinem Leaderboard: 1204843-3e53d471
OK. Jetzt wird es wild. Eigentlich sollte ich heute über Tag 7 schreiben und doch steht in der Überschrift Tag 4. Das liegt daran, dass ich noch keine Lösung für Tag 7 im Köcher habe, ehrlich gesagt nicht mal einen Ansatz. Also deswegen Tag 4.
Stringverarbeitung. Mal wieder. Und dann nicht nur einzelne Zahlen sondern auch ganze Arrays von Zahlen als String die aber Integer sein sollten.
Aber ich lerne dazu und das ist ja der Sinn der Sache. Ich mag Go. Es ist simple und man muss auch simple denken. Arrays von einander subtrahieren? Nix da. For Schleife um das Eine, mit dem Anderen verwurschteln und Zack hat man das Ergebnis. Auch die vorhin erwähnte Konvertierung. Von wegen List Comprehension und Lambda Funktionen. For Schleife, einzeln konvertieren und Append.
Leider musste ich etwas improvisieren. Um das Ergebnisarray zu initialisieren musste ich einen Wert hart festlegen. Ja, ich hätte die Datei komplett einlesen können und hätte dann auch die erforderliche Länge, das war mir aber um kurz vor 23 Uhr dann doch zuviel zum umbauen. Ach und das "du hat mehr Gewinnkarten die du während der Laufzeit bekommst und auch verwursten musst" in Teil 2, war auch fies.
Und so wandert der nächste goldene Stern auf mein Konto.
Und falls ihr euch anschließen wollt. Hier der Einladungscode zu meinem Leaderboard: 1204843-3e53d471
Mein letzer Eintrag war für Tag 2. Das lag daran, dass ich mir immer noch an Tag 3 die Zähne ausbeiße. Ich komme da einfach nicht voran. Tag 4 und 5 habe ich nicht gemacht, da ich Gestern und Vorgestern privat unterwegs war.
Dafür habe ich mir dann das heutige Rätsel angeschaut. Und was soll ich sagen, Teil 1 ist recht logisch. Eine Zahlenreihe die man mit einer geschachtelten For-Schleife abarbeitet und so das Ergenis brute forced. Und so war mir klar, dass Teil 2 dem Schema folgt, die Zahlen werden so groß, dass ein Brute Force nicht mehr machbar ist. Das ist ein gängiges Problem beim Advent of Code.
Trotzdem habe ich den "unwirtschaftlichen" Code ausgeführt weil ich es einfach nicht lassen kann. Und was passiert? Es dauert genauso (oder ungefähr) lange wie Teil 1 und ich bekomme ein Ergebnis. Und es ist sogar das Korrekte. Entweder ist das ein Fehler beim Rätsel oder es ist wirklich so einfach.
Tag 2 war heute genau das Gegenteil von gestern. Während ich mir an Teil 1 die Zähne ausgebissen habe, war der goldene Stern nur noch ein kurzes Umstellen des Code.
Ich habe mich so oft verrannt, dass ich echt irgendwann alles gelöscht und nochmal Schritt für Schritt von Vorne begonnen. Besonders bei den AoC Rätseln macht mir die statische Typisierung zu schaffen. Da ist Python schon ein no brainer. Aber hey, wir lieben doch Herausforderungen. Pille Palle kann jeder.
Liste mit unterschiedlichen Trenner. Tuple mit zuerst Kenner dann Wert und dann umgekehrt. Alles was das Herz begehrt um durcheinander zu kommen.