Advent of Code 2023 – Tag 8

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

Advent of Code 2023 – Tag 4

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

Advent of Code 2023 – Tag 6

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.

Ich bin froh über den goldenen Stern und werde mich wieder Tag 3 widmen. Mein Code wie iummer auf GitHub

Und falls ihr euch anschließen wollt. Hier der Einladungscode zu meinem Leaderboard: 1204843-3e53d471

Advent of Code 2023 – Tag 2

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.

Trotzdem gelöst und wie immer meine Lösung auf Github.

Und falls ihr euch anschließen wollt. Hier der Einladungscode zu meinem Leaderboard: 1204843-3e53d471

Advent of Code 2023 – Tag 1

Endlich. Der Dezember ist da und damit auch die Advent of Code. Meine liebste Herausforderung. Ich werde dieses Jahr wohl nicht so aktiv teilnehmen können, denn geschäftlich geht es gerade heißt her.
Aber nicht gleich den Teufel an die Wand malen und sehen wie weit ich dieses Jahr komme. Und wieder versuche ich es mit Golang.

Tag 1 hatte es aber in sich. Der Silberstern war easy, jedoch der Goldene. Wie übersetzt man Zahlenwörter in echte Zahlen und dass auch noch wenn man den String rückwärts bearbeiten muss. Die größte Herausforderung war jedoch wenn zwei Zahlenworte sich Buchstaben teilen. Man ersetzt das Eine und damit wird das andere Wort unbrauchbar. Damit ist die Ersetzungsreihenfolge relevant.

Meine Lösung hier auf Github

Und falls ihr euch anschließen wollt. Hier der Einladungscode zu meinem Leaderboard: 1204843-3e53d471

Python – Bilder sortieren à la Tinder

Wer kennt nicht die Verzeichnisse die "sortieren" heißen, in die man alle WhatsApp Bilder reingeworfen hat und einfach nicht zum sortieren kommt.
Vor Jahren habe ich mir deswegen ein kleines Python Programm geschrieben, dass mir die Bilder anzeigt und man mit den Pfeiltasten sicheren, löschen oder blättern kann. Das Programm ist damals unter Windows entstanden. Am Wochenende wollte ich es unter Linux verwenden und wurde leider von meiner Schlampigkeit eingeholt. Ja, es war nur ne Fingerübung, aber alles hardcoden ist halt nicht gut.
Und so bastelte ich an dem Skript weiter und musste auch feststellen, dass die Tastatur Scancodes für OpenCV auf jedem System anders sind und in meinem Manjaro nicht mal erkannt wurden.
Und so habe ich jetzt wieder ne nette Aufgabe die ich wohl die Tage bearbeiten werde. Sobald ich wieder etwas lauffähiges habe, werde ich es euch zur Verfügung stellen. Ihr habt ja sicherlich auch genug "sortieren" Ordner.