Advent of Code

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • daxb Die Anmeldung ist nötig um die Punkte sammeln zu können, zu merken ob man schon den ersten Teil einer Aufgabe gelöst hat, bevor man den zweiten lesen kann, und natürlich weil in der Regel jeder Teilnehmer seine eigenen Eingabedaten bekommt. Es würde also keinem etwas nützen wenn ich beispielsweise die beiden Zahlen hier posten würde die bei mir heute als Ergebnis herausgekommen sind.

    Manul Lösungen mit Mengen oder Wörterbüchern lassen sich sehr schlecht auf CBM BASIC übertragen, weil man sich so etwas in BASIC selber schreiben müsste.

    Bei der zweiten Aufgabe würde ich mir fast wünschen der C64 wäre etwas langsamer gewesen. Der hat das korrekte Ergebnis nach 4 Stunden, 44 Minuten, und 40 Sekunden ausgespuckt. Vier Sekunden wäre IMHO cooler gewesen. ?

    Spoiler anzeigen

    Wenn man das beschleunigen möchte, wäre der einfachste Schritt einen BASIC-Compiler auf das Programm los zu lassen. Oder es in C und/oder Assembler zu schreiben.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Lösungen mit Mengen oder Wörterbüchern lassen sich sehr schlecht auf CBM BASIC übertragen, weil man sich so etwas in BASIC selber schreiben müsste.

    Für die Datentypen gilt das sicherlich, der prinzipielle Algorithmus (nicht für alle Kombinationen die Summe berechnen, sondern merken, welche Zahlen bzw. Summen schon vorgekommen sind, und dann für jede neue Zahl überprüfen, ob die Differenz zu 2020 schon da war) lässt sich aber sicherlich auf den C64 übertragen, bspw. mit Arrays. Damit brauchst Du für den 1. Teil statt ~10.000 nur 200 und für den 2. Teil statt >1.000.000 nur ~10.000 Durchläufe.

    Mein CBM-Basic ist nach über 30 Jahren etwas eingerostet, aber ich hab's mal versucht (s.u.). Für Deine Zahlen wirft mein Code im Emulator (mein C64 steht eingemottet bei meinen Eltern im Keller) nach 3:46 Minuten die Lösungen 145875 für Teil 1 und 69596112 für Teil 2 aus. Dein Code braucht im selben Emulator für Teil 1 1:02 Minuten, die Geschwindigkeit scheint also dem echten Rechner vergleichbar zu sein.

    Spoiler anzeigen

    Einmal editiert, zuletzt von Manul (2. Dezember 2020 um 13:22) aus folgendem Grund: TI$ falsch interpretiert. Ja, ja, das Gedächtnis... Update: Und zwar gleich an zwei Stellen.

  • Meine BASIC auf dem C64-Lösung für Tag 2 braucht ca. 5½ Minuten. Wobei der Hauptteil davon vom lahmen Diskettenlaufwerk kommen dürfte, denn dieses mal habe ich die Daten nicht ins Programm eingebettet und das parsen der Textdatei geht mit in die Rechenzeit ein.

    Spoiler anzeigen

    Manul Coole BASIC-Lösung. Du gehst ganz schön verschwenderisch mit Zeilen um. ?

    Mit einem DIM kann man mehrere Arrays dimensionieren und Variablen werden auch automatisch initialisiert. Die Schleife die n( und s( initialisiert ist also überflüssig. Boole'sche Werte sind -1 (wahr) und 0 (unwahr). Hinter THEN kann man das GOTO weglassen und gleich die Zeilennummer schreiben. Bei Vortschrittsausgaben achte ich immer darauf, das der Bildschirm nicht scrollen muss. Das kostet erstaunlich viel Zeit ca. 2K Bytes dafür zu verschieben wenn man sonst schnellere Maschinen gewohnt ist. ? Überarbeitet braucht's nur noch 3 Minuten und 34 Sekunden:

    Spoiler anzeigen

    Die ersten beiden ”komischen” Kommentarzeilen sind für den Basic-Boss Compiler. Damit kompiliert braucht es nur noch 33 Sekunden.

    Hofei Also ein bisschen wird das Niveau aber noch steigen. ?

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Bin auch gerade mal samt meiner null Sterne dazu gekommen.

    Wenn ich das morgen raus habe, wie ich die geschachtelte Iteration für Aufgabe 1 funktional abgebildet kriege, gibt es auch neue Sternchen... aber vorher komme ich nicht dazu ;)

    Edit:

    Habe dann auch mal meine bisherigen Nicht-Lösungen auf öffentlich gestellt, für wen auch immer: https://github.com/renao/advent-of-code_2020

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

    Einmal editiert, zuletzt von Renão (3. Dezember 2020 um 00:11)

  • Bin auch gerade mal samt meiner null Sterne dazu gekommen.

    Wenn ich das morgen raus habe, wie ich die geschachtelte Iteration für Aufgabe 1 funktional abgebildet kriege, gibt es auch neue Sternchen... aber vorher komme ich nicht dazu ;)

    Edit:

    Habe dann auch mal meine bisherigen Nicht-Lösungen auf öffentlich gestellt, für wen auch immer: https://github.com/renao/advent-of-code_2020

    So... habe bislang auch noch auf einem eigenen Branch je Lösung gearbeitet, da ich dachte, dass man evtl. Aufgaben vorziehen kann (wäre ja absurd, wenn es im Rahmen einer Abenteuergeschichte läuft - hätte ich auch selbst mal drauf kommen können ;-)).

    Mein fehlschlagender Kram ist erstmal auf master ... mal schauen, inwiefern mich die Arbeit heute weitermachen lässt ;)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Schön zu sehen, dass es in euren Python-Lösungen diese `itertools` gibt :)

    Gerade weil ich aktuell 'ne neue Sprache lerne, versuche ich den Kram gerade komplett zu Fuß zu machen, da Day1 jetzt auch nicht übertrieben komplex daherkommt.

    Dennoch bin ich aufgrund der mir gerade zufliegenden Verständlichkeit eurer Lösungen doch aktuell etwas neidisch (Abgesehen von deinem BASIC __blackjack__ - wirkt mir aktuell alles zu prozessornah ;))

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Schön zu sehen, dass es in euren Python-Lösungen diese `itertools` gibt :)

    Jeder wie es sich aussucht ^^ ich bin aber schonmal froh um das, was ich mit Python kann.

    Du bist ja doch mehrsprachiger unterwegs :thumbup:

    Hab mir deine Sprache gestern schonmal angeschaut, verstehen tu ich davon 0.

    Ja __blackjack__ spielt mit erhöhtem Handicap. Dennoch hoffe ich auch immer wieder Python Lösungen sehen zu können, um dazu lernen zu können.

    EDIT:

    Ob @__deets__ und noisefloor den Thread schon entdeckt haben :wink:;)

  • Ja, aber ich habe Zuviel andere Dinge die ich programmieren will/muss. Da kann ich leider nicht teilnehmen. Ich lese aber gelegentlich hier mit :)

  • Also konstruktive Kritik am eigenen Code hilft mir am meisten, um mich im Programmieren verbessern zu können.

    Ja, aber ich habe Zuviel andere Dinge die ich programmieren will/muss. Da kann ich leider nicht teilnehmen

    Das ist natürlich verständlich - aktuell nimmt es bei mir pro Tag so 30-45 Minuten in Anspruch, da bist du doch sicherlich schneller ;)

    Bin jedenfalls nach wie vor Begeistert von dieser Aktion, welche ich so bisher noch nicht kannte.

  • Tag1
    Tag2
  • [...]

    Hab mir deine Sprache gestern schonmal angeschaut, verstehen tu ich davon 0.

    [...]

    Ist ein wenig anders alles, deswegen tue ich mich auch gerade schwer aus der OOP-Denke rauszukommen, aber genau das tut auch gerade gut - egal wie viel Hirnakrobatik aktuell von Nöten ist ;)

    Wollte ansonsten gerade sagen, dass ich endlich meine ersten beiden Sterne fürs Leaderboard beitragen kann ... dann steht da doch tatsächlich das Tag 1 gar nicht gewertet wird :P

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!