Kleine BASIC-Compo fuer zwischendurch: Draw The Frog

  • Hexworx schrieb:

    Die Lösung von @detlef finde ich auch außergewöhnlich. Vielleicht magst du es mal etwas erklären.

    ZeHa schrieb:

    Es gibt ein paar die symmetrisch gezeichnet werden, z.B. die Version von @detlef wenn ich mich richtig erinnere, und bestimmt nochmal 1-2 andere.
    Aber mit Pupillenkorrektur. :)

    1 A$="_×33- !!!#ÃÓÖÕÐÓÁÁÁÓ___!___?//__"
    2 DEFFNZ(X)=(ASC(MID$(A$,X,1))-32ANDM)>0:FORI=1TO17:M=1:FORN=0TO5:A=-FNZ(I)
    3 A=A-FNZ(I+17)*2:A=A-(A>1)*3:X=N*2+C:GOSUB5:X=26-N*2-C:GOSUB5:M=M*2:NEXT
    4 P=P+40:NEXT:A=1:P=44:GOSUB5:P=P+2:A=0:GOSUB5:END
    5 FORC=0TO1:POKE1190+P+X+C,160:POKE55462+P+X+C,A:NEXT:RETURN

    Meine Lösung sieht vielleicht etwas kompliziert aus, ist sie aber eigentlich nicht. Man merkt aber, dass ich normalerweise lieber Assembler statt BASIC programmiere. ;)

    Die Farben sind in A$ kodiert, jeweils 2 Bit pro Froschpixel, 6 Bit pro String-Zeichen und 2 String-Zeichen pro Froschzeile (2 Bit bleiben in jedem Zeichen ungenutzt, damit keine ungültigen Basic-Zeichen entstehen). Da der Frosch prinzipiell symetrisch ist, wird nur eine Hälfte codiert. Damit die Bits einfacher extrahiert werden können, werden die beiden Farb-Bits für jeden Pixel getrennt gespeichert (das erste Bit in den ersten 17 Byte, das zweite Bit in den zweiten 17 Byte).

    Die Funktion Z(X) holt einen Pixel aus dem String (Zeichenposition P und Bitposition M). Das Unterprogramm in Zeile 5 zeichnet einen Pixel.
    In Zeile 4 nach dem NEXT wird das rechte Auge korrigert, was vermutlich mehr Speicher braucht, als man bei der symetrischen Kodierung einspart. Aber ich fand's lustig.

    Die Kodierung der Farben ist einigermaßen effizient, das Zeichnen weniger. Ich habe mir auch nicht die Mühe gemacht, noch mal ein paar Bytes einzusparen, weil die Lösung mit 259 Bytes sowieso nicht in der 150-Byte-Liga mitspielt. :D

    Meine Lösung ähnelt übrigens sehr stark der von ZeHa. Allerdings nutze ich zur Korrektur der 2-Bit-kodierten Farbwerte keinen 4-Zeichen-String sonden die Formel: A=A-(A>1)*3. Dafür müssen die Farben genau so kodiert sein, dass die Formel funktioniert.
    PET 2001 / CBM 3032 / CBM 3040+4040 / CBM 8250 (Dauerleihgabe) / diverses C64-/VC20-Zeugs

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von detlef ()

  • So, leider hat es jetzt doch noch alles etwas laenger gedauert, da ich etwas viel um die Ohren hatte. Aber ich moechte das ganze natuerlich noch zu einem vernuenftigen Abschluss bringen und verkuende hiermit nun

    -=das Ergebnis=-



    Kategorie "kuerzester Code" (alle Angaben in PRG-Groesse):
    - 1. Platz: @Rapid Eraser (126 Byte) - kuerzeste Variante von allen
    - 2. Platz: @Mac Bacon (166 Byte) - kuerzeste Variante mit "ordentlichem" BASIC
    - 3. Platz: @YPS (168 Byte) - kuerzeste Variante die sich auf einem C64 direkt eintippen laesst

    Anmerkung: Die genannten User haben teilweise auch kuerzere Varianten im Gepaeck, die aber nicht den oben genannten Kriterien entsprechen; auch gibt es dazwischen noch weitere Beitraege von anderen Usern - kurzum, es sind mit Ausnahme von Platz 1 nicht die drei generell kuerzesten Varianten. Auch existiert eine inzwischen korrigierte Fassung von @Tale-X, diese konnte jedoch nicht mehr in die Bewertung aufgenommen werden, da die Compo bereits beendet war. Dennoch grossen Respekt an alle anderen kurzen Varianten!


    Kategorie "schoenstes Ergebnis":
    - 1. Platz: @EgonOlsen71 - fliegende Pixel-Partikel ergeben nach und nach einen Frosch
    - 2. Platz: @Chagizzz - Frosch sieht sich skeptisch mit schlitzfoermig geoeffneten Augen nach links und rechts um und tappt dabei mit den Zehen
    - 3. Platz: @Unseen - Obama-farbiger Frosch wird aus vorberechneten Random-Werten generiert


    Kategorie "Sonderpreis":
    - Ehrenplatz: @Vernunftmensch - lustige Ideen; zig verschiedene Einsendungen; ueberfahrener Zufallsfrosch; Inspirationsquelle fuer @Unseen

    ---

    Auch wenn es schon oft gesagt wurde, nochmals vielen Dank an alle Teilnehmer, ich habe wirklich nicht damit gerechnet, dass so viele mitmachen. Viel Spass noch beim Studieren der Fremd-Codes und hoffentlich gibt es bald mal wieder eine interessante Compo :thumbup:

    Die Gewinner duerfen sich per PM bei mir melden und sich aussuchen ob sie eines der beiden Frogs-Mauspads haben moechten oder lieber mit einer Frogs-Stofftasche vorlieb nehmen moechten. :weihnachten:
    SHOTGUN - 4-Player Death Match - Website / CSDb / X-Mas
    FROGS - 4-Player Frog Pond - Website / CSDb

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ZeHa ()

  • ZeHa schrieb:

    Zufallsfrosch; Inspirationsquelle fuer @Unseen
    Eher nicht ;)
    Die Idee eines RANDOM results auf das man im Zweifel beliebig lange warten muss gibt es quasi bei jeder Compo.
    Meist wird genau das mit 'endlicher Ausfuehrungszeit' explizit verhindert. Neu ist, dass es jemand auch wirklich konsquent durchfuehrt und noch dazu soweit optimiert dass es NICHT auf Zufall + Warten hinauslaeuft.
    Auch nicht wirklich neu, wenn man sich Unseens Signatur ansieht ;)
  • ZeHa schrieb:

    mag durchaus sein dass Unseen auch ohne Vernunftmensch draufgekommen wäre, ich hatte aber trotzdem den Eindruck dass er überhaupt nur deshalb vllt auf die Idee gekommen sein könnte, mitzumachen ;) aber wie auch immer, ist ein echt cooler Beitrag :)
    Na ja, das Ende war so praktisch hinter dem Osterwochenende terminiert, warum früher anfangen? =) Nur die Vorberechnung der möglichen Sequenzen musste ich etwas früher anstossen, aber das hätte ich bei Zeitproblemen auch noch irgendwie parallelisiert bekommen.

    (wäre mal eine gute Gelegenheit gewesen, meine BOINC-Server-Instanz wieder zu aktualisieren ;) )

    Quellcode

    1. 10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    2. 20 forj=1to5:printchr$(rnd(1)*16+70);:next
    3. 30 printint(rnd(1)*328)-217

    sd2iec Homepage
  • Vielen Dank für die schöne Combo. Die kürzesten Codes sind echt toll.

    Meine Zufallsfroschversion die komplett auf Zufall basiert mit 62 Byte wurde doch garnicht mit reingenommen. Sage ich nur weil einer meinte, das sei mein Zufallsfrosch. Nein beim meinem neuen überfahrenden Zufallsfrosch habe ich wie Unseen in den Pseudozahlen mit CPU-Power gesucht.

    Würde mich freuen wenn Unseen wirklich durch mich ein bißchen insperiert wurde. :)
    Wer den C64 nicht ehrt ist des x64ers nicht wert.
  • ZeHa schrieb:

    -=das Ergebnis=-


    Kategorie "kuerzester Code" (alle Angaben in PRG-Groesse):
    - 1. Platz: @Rapid Eraser (126 Byte) - kuerzeste Variante von allen
    - 2. Platz: @Mac Bacon (166 Byte) - kuerzeste Variante mit "ordentlichem" BASIC
    - 3. Platz: @YPS (168 Byte) - kuerzeste Variante die sich auf einem C64 direkt eintippen laesst
    Huch! Darauf hatte ich natürlich gehofft, aber dennoch befürchtet das sich alle - und i.d.R. auch versiertere - Basic-Kenner auf die Krone stürzen um kürzere Programme an den Start zu bringen. Das ist jetzt freilich eine unerwartete Ehre für mich! :woot:

    Da muss ich nun wohl auch spontan eine Dankesrede halten, oder?
    *Zettel aus der Tasche hol*
    "Ich bin kein großer Redner, deswegen bitte ich im Voraus um Entschuldigung dafür das ich mich kurz fasse. Und möglichererweise nicht jeden gebührend würdige, dem Würde gebührt. Aber der Reihe nach.
    Alles begann eines schönen Wintertages im Jahre des Herrn 1711. Der Wind war zornig an diesem Tag, meine Freunde! Doch ungeachtet des Windes zog mein Urururururururgroßvater freudestrahlend in den Wald hinaus um Feuerholz für sich und seine 835 Geschwister zu sammeln. Dumpf klang jeder Schritt in seinen Ohren, als er unter unheilvoll drohenden Wolken durch den frisch gefallenen Schnee stapfte!
    ... yada yada yada...
    Danke! Und jetzt hoch die Tassen!" :D

    ZeroZero schrieb:

    Gratulation an alle Preisträger und Danke an alle Teilnehmer für die Codes!
    Auch von mir Gratulation an alle Teilnehmer! In den Beiträgen gibt es ja einiges zu entdecken! :) :) :)
  • Benutzer online 1

    1 Besucher