FizzBuzz Compo - und die Gewinner sind ...

  • FizzBuzz Compo - und die Gewinner sind ...

    peiselulli und peiselulli =)

    Falls ich nix vergessen habe, findet ihr alles im Dateianhang. D64 Images für die jeweiligen Kategorien, ergebnisse.txt, gueltig.txt und ungueltig.txt und ein weiteres ZIP-File mit den kompletten Beiträgen und Sourcecodes.
    Ich hoffe vor allem, ich habe nirgends einen Fehler gemacht. Ansonsten bitte melden.

    Den Inhalt der ergebnisse.txt pack ich eben hier rein:

    ------------------

    Auswahl der Beiträge:
    Letztenendes ist von denjenigen, die zwei oder mehr gültige Programme abgegeben haben logischerweise das jeweils "schnellste" und das jeweils "kürzeste" in der entsprechenden Kategorie gewertet worden. Wenn jemand nur ein Programm abgegeben hat, so taucht dieses der Vollständigkeit halber in beiden Kategorien auf.

    Source Code

    1. Kategorie Größe
    2. 01.) peiselulli fizzbuzz_dirty 53 Bytes
    3. 02.) skoe fb-skoe 64 Bytes
    4. 03.) Colt Seavers shortbuzz 82 Bytes
    5. 04.) DirkVroomen buzzfizz-24.bas 84 Bytes
    6. 05.) enthusi asm05 89 Bytes
    7. 06.) The Joker tj-fizz1 95 Bytes
    8. 07.) Unseen fizzbuzz5 96 Bytes
    9. 08.) drazil fizzbuzz083 97 Bytes
    10. hobbycoder fizzbuzz-basic2 97 Bytes
    11. 09.) neuRomancer fizzbuzzasm 108 Bytes
    12. 10.) JMP$FCE2 fizzbuzz.bas 111 Bytes
    13. 11.) Robert robert 123 Bytes
    14. 12.) Soulstealer fizzbuzz ! 124 Bytes
    15. 13.) The Ryk fizz 446 Bytes
    16. Kategorie Geschwindigkeit
    17. 01.) peiselulli fizzbuzz_fast TI($A2): 00
    18. 02.) The Joker tj-fizz3 TI($A2): 01
    19. 03.) TheRyk fizz TI($A2): 01
    20. [ robert robert Pi*Daumen ]
    21. 04.) Soulstealer fizzbuzz ! TI($A2): 09
    22. 05.) neuRomancer fizzbuzzasm TI($A2): 21
    23. 06.) JMP$FCE2 fizzbuzz.asm TI($A2): 23
    24. 07.) enthusi asm05 TI($A2): 25
    25. [ skoe fb-skoe Pi*Daumen ]
    26. 08.) Colt Seavers shortbuzz TI($A2): 2F
    27. 09.) Unseen fizzfast1 TI($A2): 34
    28. 10.) drazil fizzbuzz083 TI($A2): 36
    29. 11.) DirkVroomen buzzfizz-24.bas TI($A2): 43
    30. 12.) hobbycoder fizzbuzz-basic2 TI($A2): A1
    Display All


    Durchführung der Zeitmessung:
    - LOAD"Dateiname",8,1
    - VICE Monitor Breakpoint auf $e38b (nur bei enthusi auf das bvc)
    - TI$="000000":RUN
    - und im VICE Monitor Speicherstelle $A2 ausgelesen

    The Joker ist einen Platz vor TheRyk, weil sein Programm 2 Bytes kürzer ist. Wenn man Zyklen zählen würde, wäre es noch eindeutiger, weil dort eine Schleife weniger benutzt wurde.

    Die Zeitmessung gestaltete sich leider beim Eintrag von skoe und robert etwas schwierig. Da beide auch Kernal Routinen nutzen, wäre Zyklen zählen ziemlich mühsehlig.

    Pi*Daumen heisst: ich habe alle Einträge mit Autostart INJECT aus dem Dateibrowser mit VICE gestartet und so schnell wie möglich den Monitor angeworfen und den Wert aus $A2 notiert. Das ganze habe ich 5 mal wiederholt und dann den Mittelwert errechnet.
    Die Einträge von skoe und robert wurden bei den Beiträgen einsortiert, die "ungefähr" bei dieser Methode die gleichen Werte hatten.

    ------------------

    Vielen Dank für die rege Beteiligung. War eine sehr interessante Compo. Insbesondere bin ich überrascht, dass doch tatsächlich 3 ASM Progs auch in der Kategorie Größe führen, bevor ein Basic Prog kommt.
    Files
  • Hab mir grade mal die Programme angeschaut. Leute, was fresst ihr fürn Zeug um auf solche Lösungen zu kommen?



    (Ich hoffe das Posten ist ok, Dirk, aber WTF? Wie kommt man auf so eine Variablenorgie hinter dem Print Befehl???)


    Meinen grössten Respekt an Euch Hirnakrobaten :)
  • enthusi (gelöscht) wrote:


    Ach so. Was wurde denn aus asm01 ?
    Hast Du bankswitch-Varianten rausgeworfen.

    siehe Begründung in ungueltig.txt. peiselulli hat angekreidet, dass es nicht auf dem alten Kernal läuft. Da keiner widersprochen hat, habe ich das so akzeptiert.


    Ich hege Zweifel and der TI-Methode.
    Sehr SEI-Abhaengig :)


    Ich hab Stichprobenartig die "Probe aufs Exempel" gemacht. Hatte nirgends Schwankungen drin. [also nur bei der manuellen natürlich - deswegen hab ich die auch vermieden].
    EDIT: außerdem könnte sich da eher Colt beschweren. Der ist nicht so weit unter Dir und bei Dir musste ich den Breakpoint auf das bvc setzen.


    Zu Robert wollte ich noch schreiben, dass es KEINE Kernal-calls verwendet :)

    Au, da hab ich mich verschrieben. Dennoch meine ich, dass es ungefähr richtig einsortiert ist. Könnte auch auf 2. gehören. Ich war da unentschlossen.
  • Lysosom wrote:

    Leute, was fresst ihr fürn Zeug um auf solche Lösungen zu kommen?

    Keine Ahnung, muss mal überlegen, ob die Tage was Spezielles dabei war? War bestimmt irgendetwas völlig Ungesundes.

    Ingesamt hat das richtig Spaß gemacht, insbesondere das "Rennen" mit Drazil, der als Erster die 90 geknackt hat. Die ersten Versuche waren knapp unter 200 Byte, ein paar Tage später schien die 100 Byte-Grenze unüberwindbar und zum Schluß waren es dann 84 Byte. Ob da noch mehr gegangen wäre, wollte ich dann nicht mehr wissen ;)
    Die Ergebnisse hier sind echt erstaunlich und hätte ich so nie für möglich gehalten. Hut ab!

    Gruß Dirk
    gesendet über Robotron Lochbandtechnik mit A 5120
  • Bitteschön ...

    Der kürzeste ...

    Source Code

    1. !to "fizzbuzz_dirty.prg",cbm
    2. !cpu 6510
    3. *= $0801
    4. !by $0a,$08,$00,$00,$9e,$32,$30,$36,$39,$0
    5. loop:
    6. cpx #$00
    7. bne no_line_number
    8. jsr $bdc9 ; print out current basic line
    9. no_line_number:
    10. jsr $e6b6 ; curser go right
    11. entry:
    12. inc $39 ;increment line number
    13. endless:
    14. bmi endless ;endless loop if >= 128
    15. lsr $0f
    16. bcc no_fizz
    17. ldy #$00
    18. ldx #$04
    19. stx $0f
    20. print_string:
    21. stx $b7
    22. jsr $f5c7 ;print out part of the filename
    23. no_fizz:
    24. asl $30
    25. bcc loop
    26. ldy #$04
    27. ldx #$08
    28. sty $30
    29. bne print_string
    Display All


    Den schellsten habe ich gerade nicht hier, der ist aber auch zu trivial ...
    BTW, der "cpx #00" muss sein, ansonsten verhapselt sich eventuell der Basic-Interpreter nach dem Laden in eine Endlosschleife ...
    (Deshalb läuft die 51 Byte Variante eventuell nicht)
  • Oh, ich meinte eigentlich nicht diesen Thread, sondern den Artikel, den Spider-J verlinkt hatte. Aber trotzdem danke, den schnellsten kann ich vmtl. auch im Vice-Monitor nachlesen, mehr als 2-3 Befehle dürften das ja nicht sein :)

    Edit: Ah, Problem gelöst :)
    "<Lieblingskalenderspruch bitte hier vorstellen>"
  • peiselulli wrote:


    Den schellsten habe ich gerade nicht hier, der ist aber auch zu trivial ...

    Na eben ja doch nicht so ganz trivial. Das mit dem alten Kernal hatte ja irgendwie niemand auf dem Schirm [ich übrigens auch nicht, hab allerdings drauf verzichtet meine Version zu posten, da die 1:1 enthusis asm01 entsprach]. Dabei ist das eigentlich *bekannt*, dass Commodore da später noch ein bisschen was glattgebügelt hatte.
  • Ich bin halt damals, als ich Flaschbier programmiert habe, auf die Fresse gefallen.
    Bei dem "neuen" Kernel gibt es zwischen den Leveln immer so zwei sinnlose Zeichen, die ich mit meinem alten Kernal nie gesehen hatte ...
    Ärgert mich heute noch :-<
  • spider-j wrote:

    The Joker ist einen Platz vor TheRyk, weil sein Programm 2 Bytes kürzer ist. Wenn man Zyklen zählen würde, wäre es noch eindeutiger, weil dort eine Schleife weniger benutzt wurde.

    Nur 1 Schleife? Da würde ich ja gern den Code mal sehen, um zu checken, ob WIRKLICH von links oben nach rechts unten geschrieben wird... :) Tja, wäre mir klar gewesen dass kein RTS notwendig ist, hätte ich nur noch irgendwo 1 byte sparen müssen... aber wo...

    Egal, ich gratuliere fair allen Teilnehmern und sage artig danke an Spider, war mal wieder great fun.

    Mit Platz 3 in Speed muss ich mich nicht verstecken, bin zufrieden, für einen 2-jahre-asm-erfahrenen zumindest ein Zeichen, dass man ein bisschen was verstanden hat ;)
    Preisgeweine? :woot: Kinder, holt Daddys Tränenweste! :weg:
  • spider-j wrote:

    TheRyk wrote:


    Nur 1 Schleife? Da würde ich ja gern den Code mal sehen, um zu checken, ob WIRKLICH von links oben nach rechts unten geschrieben wird... :)

    Sourcecodes sind alle in dem Archiv mit drin. Aber die Reihenfolge war doch wurscht, so lange es am Ende korrekt angezeigt wird.

    Uiuiui! Dann habe ich es mir zu schwer gemacht bzw. nicht dreckig genug :)
    Preisgeweine? :woot: Kinder, holt Daddys Tränenweste! :weg:
  • Kann mir eigentlich jemand erklären, wie enthusi's Spaß POKE1,0 Beitrag funktioniert?
    Also ich komme soweit, dass der Interpreter ja nach $b824 springt um den Poke abzuarbeiten. Der Code lädt nach $b82c - an der Stelle ist im ROM ein rts. Allerdings frage ich mich nun: wann wird eigentlich auf das RAM unter dem Basic-Rom umgeschaltet? Denn in das ROM wird der Code ja mit Sicherheit nicht geladen.
  • Herzlichen Glückwunsch an den Gewinner, super gemacht! Aber auch die anderen Beiträge sind prima, hab mir die gerade mal genüsslich durchgeschaut... :thumbsup:

    Hm, meine Intention, $A2 zum Überlauf zu bringen und beim Speed wieder ganz vorn dabei zu sein, hat nicht ganz geklappt, LOL... :P Egal, dann bin ich halt der Langsamste, das muss man auch erstmal hinkriegen! ;)
    How can you know where you've been?
    In time, you'll see the sign
    and realise your sin.