Die Lösung von @detlef finde ich auch außergewöhnlich. Vielleicht magst du es mal etwas erklären.
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.
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.