Advent of Code

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Wie letztes Jahr versuche ich mein Glück wieder, wo möglich, mit einem VIC-20 (≈1 Mhz 6502 Prozessor, Grundausstattung von 3½ KiB Arbeitsspeicher für BASIC (Programm + Daten), furchtbar langsames Diskettenlaufwerk 🤓).


    Bei Tag 1 braucht der zweite Aufgabenteil viel Zeit. Teil 1wäre in 5½ Minuten durch, aber beide Teile zusammen brauchen 38 Minuten und 22 Sekunden für 1.000 Eingabezeilen, ≈22 KiB:

    Tradition is just peer pressure from dead people.

  • VIC-20 (≈1 Mhz 6502 Prozessor, Grundausstattung von 3½ KiB Arbeitsspeicher für BASIC

    Faszinierend, das BASIC! Und Dein Ehrgeiz! :S


    Ich friemel mich wieder mit Python durch.

    Teil 1 ging gut (mit regex), bei Teil 2 habe ich eine Zeit gebraucht, das "Lookahead" hinzukriegen (bzw. überhaupt erst die Notwendigkeit dafür zu erkennen).

  • framp Es ist nicht so sehr das BASIC was ich liebe, sondern diese Rechner und die Erfahrung. Das ist wie Oldtimer fahren, wo es ja sicher auch genug Leute gibt die nicht so wirklich verstehen wie man sich ein altes Auto ohne den heutigen Komfort antun kann.


    Das CBM BASIC V2 war meine erste Programmiersprache. Ich hatte den C64 zu Weihnachten bekommen und gleich an dem Abend das Handbuch durchgearbeitet, was zum Hauptteil aus einer Beschreibung von dem BASIC und vielen Beispielprogrammen besteht. Als ich durch war, wurde es draussen schon langsam wieder hell.


    Jetzt mit dem VIC-20, gleiche Programmiersprache, aber wegen der RAM-Einschränkung als zusätzliche Herausforderung. Und der ist ein kleines bisschen schneller als der C64.


    Einrückung wäre möglich, aber da das während der Ausführung jedes mal ”überlesen” werden muss, geht das auf die Laufzeit. Und natürlich auch auf den Speicherverbrauch. Bei den ersten beiden Puzzles noch kein Problem, aber wenn man anfängt Arrays zu benötigen können die 3½ KiB RAM schnell eng werden. Im Python-Forum gab es neulich mal einen Algorithmus um viele Nachkommastellen von der Euler'schen Zahl e zu berechnen, mit eigentlich 1.000 Stellen wo ich auf 350 Stellen runtergehen musste, weil das RAM nicht ausgereicht hätte die 1.000 in einem Integer-Array zu halten. Allerdings konnte ich das Programm so anpassen, das es die 1.000 Stellen direkt auf den Drucker ausgegeben hat. 😀


    Ausserdem hat man auf dem VIC-20 nur 23×22 Zeichen, da will man eigentlich keinen Platz mit Einrückung verschwenden, die man sowieso nicht wirklich sehen kann in dem kleinen Ausschnitt den man in das Programm hat. Das bringt nur ausgedruckt etwas, oder wenn man das auf Rechner exportiert, die mehr Zeichen auf den Bildschirm bringen können. Das könnte dann so aussehen (habe ich jetzt nur auf dem PC geändert und nicht laufen lassen):


    GOTO kann man auch verantwortlich(er) verwenden. Es gibt halt nur die FOR-Schleife und kein ELSE in CBM BASIC V2, also muss man sich zum Beispiel eine WHILE-Schleife die alle Zeilen verarbeitet mit IF und GOTO umschreiben. Das bleibt ja trotzdem noch ein strukturiertes Programm und wird damit nicht automatisch zu Spaghetti-Code. *Das* ist ja das was Dijkstra in dem Paper anprangert — Spaghetti-Code.


    Da ich neulich einen BBC Micro B in Aktion gesehen habe bin ich am überlegen ob ich mir im Laufe des nächsten Jahres so einen zulege. Die sind in 🇬🇧 recht verbreitet gewesen und dementsprechend gar nicht so teuer zu bekommen. Das BBC BASIC auf den Geräten ist auch aus den frühen 80ern, aber kein Microsoft-BASIC-Dialekt, sondern eine Eigenentwicklung. Das hat (einzeiliges) IF … THEN … ELSE, REPEAT … UNTIL, und benannte Prozeduren und Funktionen in denen man sogar lokale Variablen deklarieren kann. Und das BASIC hat einen Assembler eingebaut. Der Rechner ist so etwas wie der spirituelle Urgrossvater vom Raspi. Da haben sie auch das mit den A und B Modellen her. Der BBC MIcro A ist eine abgespecktere Variante vom B.

    Tradition is just peer pressure from dead people.

  • Die 3½ minütige Oldtimer-Fahrt von Tag 2:

    Tradition is just peer pressure from dead people.

  • Lösung für Tag 3 in Python, weil BASIC recht aufwändig war und ich da nicht mal mit Teil 1 fertig geworden bin (obwohl das machbar sein sollte):

    Tag 4 sollte in BASIC kein Problem sein. Teil 1 habe ich heute morgen schon gemacht. Teil 2 mache ich heute abend.

    Tradition is just peer pressure from dead people.

  • Ich werde noch intensiv versuchen, __blackjack__ 's Code aus #290 zumindest teilweise nachzuvollziehen.


    Hier einfach mal mein Lösungsweg:



    Edit: Ungeschickten Variablennamen "sum" zu "result" geändert.

    Edited once, last by simonz ().

  • Ich werde noch intensiv versuchen, __blackjack__ 's Code aus #290 zumindest teilweise nachzuvollziehen.


    Jetzt bin ich ganz wirr im Kopf... :daumendreh2:

    Das mit den den Klassen und dem Drumherum werde ich wohl in diesem Leben nicht mehr lernen. Und schon gar nicht intuitiv anwenden können.


    Trotzdem nehme ich fast aus jedem Deiner, __blackjack__ , Quelltexte etwas mit, zumindest als Ahaaaa-Effekt.

    Und meistens komme ich mit meinem prozeduralem Code auch irgendwie zum Ziel. :)

  • Hallo,


    speziell wenn __blackjack__ Code postet, den er nicht für jemand zur Hilfe geschrieben hat, dann muss ich auch immer viel Dokus wälzen ^^

    'attrs' wird zwar oft benutzt, muss ich aber immer wieder nachlesen und dieses mal war das 'from' in der 'yield'-Anweisung für mich neu/verwirrend. Aber ist ja dann eigentlich gar nicht so wild.


    Mein Tag 4:


    Grüße

    Dennis

    🎧 Strahlend soll die Zukunft sein, gut wir werden seh'n, ob wir wie ein Strahlemann lächelnd untergeh'n. 🎧

  • Dennis89 Ich glaube, "unter der Haube" sind unsere "Tag 4" Lösungen gar nicht so weit voneinander entfernt. :)

    Deine ist viel aufgeräumter. Noch mehr Lernstoff für mich, danke!!!


  • Tag 4 in BASIC (Laufzeit 14 Minuten und 40 Sekunden):

    Tag 5 in Python war echt Programmierarbeit 🤓. Was man hier nicht sieht ist der ganze Code der für Teil 2 ersetzt wurde damit der für beide Teile funktioniert:

    Tradition is just peer pressure from dead people.

  • Wenn man Rechenleistung hat, braucht man heute am Tag 6 nicht viel Nachdenken — das kann man einfach brutal auszählen, auch wenn es für Teil 2 ein paar Sekunden braucht auf meinem Bürorechner.


    Wenn man weniger leistungsfähige Hardware verwendet, *hust* VIC-20 *hust*, dann muss man ein bisschen Nachdenken welche Eigenschaften der Möglichen Versuche man ausnutzen kann um nicht tatsächlich alle durchrechnen zu müssen. Dabei kann eine Visualisierung der Werte aus dem Aufgabenbeispiel hilfreich sein, die man sich beispielsweise auf einem Epson-kompatiblen (9-)Nadeldrucker mit folgendem BASIC-Programm erstellen kann:

    Für Leute die aus irgendwelchen nicht wirklich nachvollziehbaren Gründen so etwas nicht zur Hand haben:

    Tradition is just peer pressure from dead people.