Lass uns Mona Lisa zeichnen

39

Im Jahr 2014 Demoscener Jakub 'Ilmenit' Debski veröffentlichte eine 250-Byte (1) Verfahren Grafiken Demo für den Atari XL genannt Mona . Es zeichnet das folgende Bild (2) :

mona

Ihre Aufgabe ist es, mit der Sprache Ihrer Wahl genau das gleiche Bild zu erzeugen.


(1) Aufschlüsselung: 136 Datenbytes + 114 Code-Bytes.
(2) Das Originalbild ist 128x96. Die obige Version wurde auf 256x192 vergrößert. Einige Pixel unterscheiden sich vom Original, dies ist jedoch die erwartete Ausgabe mit dem in dieser Challenge beschriebenen Pseudocode.

Wie?

Das ist . Obwohl Sie berechtigt sind, eine Methode zu verwenden, werden die besten Ergebnisse höchstwahrscheinlich mit dem unten beschriebenen Originalalgorithmus erzielt.

NB : Dieser Absatz ist keine Spezifikation, sondern eine allgemeine Beschreibung. Einzelheiten zum Algorithmus finden Sie im Pseudocode und in der Referenzimplementierung.

Das Bild besteht aus 64 pseudozufälligen Pinselstrichen ( siehe dieses Video ) und durchläuft die folgenden Farben (im hexadezimalen RRGGBB-Format):

COLOR = [ 0xFFE289, 0xE99E45, 0xA55A00, 0x000000 ]

Der Hintergrund wird zunächst mit der 4. Farbe (schwarz) gefüllt. Jeder Strich ist kürzer als der vorherige.

Der Pseudozufallsgenerator verwendet ein Linear-Feedback-Schieberegister (LFSR) für eine 32-Bit-Ganzzahl, die ursprünglich auf 0x7EC80000XOR gesetzt und mit XOR verknüpft wurde 0x04C11DB7.

Jeder Strich wird mit einem 16-Bit-Wert initialisiert, der die niedrigsten Bytes des Seeds überschreibt:

BRUSH = [
  0x030A, 0x37BE, 0x2F9B, 0x072B, 0x0E3C, 0xF59B, 0x8A91, 0x1B0B,
  0x0EBD, 0x9378, 0xB83E, 0xB05A, 0x70B5, 0x0280, 0xD0B1, 0x9CD2,
  0x2093, 0x209C, 0x3D11, 0x26D6, 0xDF19, 0x97F5, 0x90A3, 0xA347,
  0x8AF7, 0x0859, 0x29AD, 0xA32C, 0x7DFC, 0x0D7D, 0xD57A, 0x3051,
  0xD431, 0x542B, 0xB242, 0xB114, 0x8A96, 0x2914, 0xB0F1, 0x532C,
  0x0413, 0x0A09, 0x3EBB, 0xE916, 0x1877, 0xB8E2, 0xAC72, 0x80C7,
  0x5240, 0x8D3C, 0x3EAF, 0xAD63, 0x1E14, 0xB23D, 0x238F, 0xC07B,
  0xAF9D, 0x312E, 0x96CE, 0x25A7, 0x9E37, 0x2C44, 0x2BB9, 0x2139
];

Diese Werte werden auch verwendet, um die neue Position verwendet (bx, by) der Bürste zu Beginn des Hubes: bx wird durch das niedrigstwertige Byte gegeben und durch durch das höchstwertige Byte angegeben.

Die Richtung des Strichs wird durch die Bits # 1 und # 7 des Startwerts angegeben. (Siehe die SWITCH-Anweisung im Pseudocode.)

Pseudocode

Unten ist der Algorithmus in Pseudo-Code, 0-indizierte Arrays unter der Annahme, wo AND, ORund XORmittlere Bit - Operationen.

seed = 0x7EC80000
dir = 0x00

FOR part = 0 TO 63
  word = BRUSH[part]
  seed = (seed AND 0xFFFF0000) OR word
  bx = word AND 0xFF
  by = (word >> 8) AND 0xFF

  FOR len = 0 TO (64 - part) * 32 - 1
    carry = seed AND 0x80000000
    seed = (seed << 1) AND 0xFFFFFFFF

    IF carry
      seed = seed XOR 0x04C11DB7
      dir = seed AND 0xFF
    ENDIF

    SWITCH dir AND 0x82
      CASE 0x00:
        by = (by + 1) AND 0x7F
      ENDCASE
      CASE 0x02:
        bx = (bx + 1) AND 0x7F
      ENDCASE
      CASE 0x80:
        by = (by - 1) AND 0x7F
      ENDCASE
      CASE 0x82:
        bx = (bx - 1) AND 0x7F
      ENDCASE
    ENDSWITCH

    drawPixel(bx, by, COLOR[part AND 3])
  ENDFOR
ENDFOR

Referenzimplementierung

Unten finden Sie eine Referenzimplementierung in JavaScript, die nicht für Golfer geeignet ist.

Sie können hier auch eine animierte Version sehen .

Klarstellung und Regeln

  • Die Ausgabe muss auf 128x96 beschnitten werden, obwohl der Algorithmus außerhalb dieses Bereichs zeichnet.
  • Wenn Ihre Sprache / Plattform die oben beschriebenen genauen Farben nicht ausgeben kann, müssen Sie Farben verwenden, die so nah wie möglich sind.
  • Wenn Sie sich für eine alternative Methode entscheiden, müssen Sie dennoch genau dieselbe Ausgabe generieren.
  • Nur für den Fall: Das Senden des ursprünglichen 6502-Assemblercodes oder einer leicht bearbeiteten Version ist nicht zulässig.
  • Können Sie 250 Bytes schlagen? Viel Spaß beim Zeichnen!
Arnauld
quelle
1
Das "Sie werden dazu ermutigt" ist problematisch, denn wenn dies mit dem Speichern von Bytes in Konflikt steht, sollte dies jemand tun oder nicht? Es sollte entweder "Sie müssen" sein (auch wenn es Bytes kostet) oder "Sie dürfen" (nur wenn es Bytes speichert).
1
Normalerweise halte ich es für besser, die ASCII-Option in eine andere Herausforderung aufzuteilen, ansonsten gibt es sowieso zwei Unterherausforderungen.
FryAmTheEggman
1
@FryAmTheEggman Es war ursprünglich nur als grafische Ausgabe gedacht und das Hinzufügen dieser ASCII-Option war wahrscheinlich eine schlechte Idee. Hoffentlich ruiniere ich einige WIP-Antworten nicht, indem ich sie entferne ...
Arnauld,
4
@ATaco Paint Starry Nigh war eine Code-Herausforderung mit einem anderen Ziel (möglichst genaue Reproduktion des Bildes). Dieser ist einfach kolmogorov-Komplexität mit einer konstanten Ausgabe.
Arnauld
1
Das ist verständlich, Redacting meine enge Abstimmung.
ATaco

Antworten:

7

x86-Opcode, 227 224 223 Bytes

0000h: 68 20 A8 07 B8 13 00 CD 10 66 BF 40 00 C8 7E 5A
0010h: 89 FD BE 5B 01 AD 89 C7 89 E9 C1 E1 05 66 D1 E7
0020h: 73 09 66 81 F7 B7 1D C1 04 89 FA 80 E2 82 74 09
0030h: 7A 04 78 08 40 40 05 7F 7F 80 C4 02 FE CC 25 7F
0040h: 7F 89 EB 83 E3 03 8A B7 DB 01 88 E3 6B DB 40 01
0050h: C3 26 88 37 E2 C7 4D 75 BC EB FE 0A 03 BE 37 9B
0060h: 2F 2B 07 3C 0E 9B F5 91 8A 0B 1B BD 0E 78 93 3E
0070h: B8 5A B0 B5 70 80 02 B1 D0 D2 9C 93 20 9C 20 11
0080h: 3D D6 26 19 DF F5 97 A3 90 47 A3 F7 8A 59 08 AD
0090h: 29 2C A3 FC 7D 7D 0D 7A D5 51 30 31 D4 2B 54 42
00a0h: B2 14 B1 96 8A 14 29 F1 B0 2C 53 13 04 09 0A BB
00b0h: 3E 16 E9 77 18 E2 B8 72 AC C7 80 40 52 3C 8D AF
00c0h: 3E 63 AD 14 1E 3D B2 8F 23 7B C0 9D AF 2E 31 CE
00d0h: 96 A7 25 37 9E 44 2C B9 2B 39 21 43 00 06 42   

  0100 6820A8                 push A820
  0103 07                     pop es
  0104 B81300                 mov ax, 0013
  0107 CD10                   int 10
  0109 66BF4000C87E           mov edi, 7EC80040
  010F 5A                     pop dx
  0110 89FD                   mov bp, di
  0112 BE5B01                 mov si, 015B
  0115 AD                     lodsw
  0116 89C7                   mov di, ax
  0118 89E9                   mov cx, bp
  011A C1E105                 shl cx, 05
  011D 66D1E7                 shl edi, 01
  0120 7309                   jnb 012B
  0122 6681F7B71DC104         xor edi, 04C11DB7
  0129 89FA                   mov dx, di
  012B 80E282                 and dl, 82
  012E 7409                   je 0139
  0130 7A04                   jpe 0136
  0132 7808                   js 013C
  0134 40                     inc ax
  0135 40                     inc ax
  0136 057F7F                 add ax, 7F7F
  0139 80C402                 add ah, 02
  013C FECC                   dec ah
  013E 257F7F                 and ax, 7F7F
  0141 89EB                   mov bx, bp
  0143 83E303                 and bx, 0003
  0146 8AB7DB01               mov dh, [bx+01DB]
  014A 88E3                   mov bl , ah
  014C 6BDB40                 imul bx, 0040
  014F 01C3                   add bx, ax
  0151 268837                 mov es:[bx], dh
  0154 E2C7                   loop 011D
  0156 4D                     dec bp
  0157 75BC                   jne 0115
  0159 EBFE                   jmp 0159
  015B 0A03BE37...3921        brush_dw
  01DB 43000642               color_db

Bild: Bildbeschreibung hier eingeben

l4m2
quelle
1
Würde es Ihnen etwas ausmachen, eine Erklärung dazu und einen Screenshot der Ausgabe beizufügen - da dies nicht selbsterklärend ist
Taylor Scott
Sollte ich eine Kamera oder eine virtuelle Umgebung verwenden, da ich sie im Vollbildmodus laufen
lasse
1
0122 6681F7B71DC104 xor edi, 00001DB7Fehler gefunden in W32Dasm
l4m2
22

8086 Assembly - NASM (MBR) - 248 245 Byte

[org 0x7C00]
[bits 16]
    push 0xA000
    pop es
    mov si, $brush
    xor cx, cx

    mov ax, 0x0013
    int 0x10

    mov ebx, 0x7EC80000

part_loop:
    lodsw
    mov bx, ax

    mov bp, 64
    sub bp, cx
    shl bp, 5
    mov sp, bp

len_loop:
    shl ebx, 1
    jnc not_carry
    xor ebx, 0x04C11DB7
    mov dh, bl
    not_carry:

    and dh, 0x82
    je dir_00
    jpe dir_82
    js dir_80
    dir_02:
        inc al  
        jmp dir_end
    dir_82:
        dec al
        jmp dir_end
    dir_00:
        inc ah
        jmp dir_end 
    dir_80:
        dec ah  
    dir_end:

    and ax, 0x7F7F
    cmp ah, 96
    jae skip

    movzx di, ah
    movzx bp, al
    imul di, 320
    add di, bp
    mov bp, cx
    and bp, 3
    mov dl, byte[bp + color]
    mov [es:di], dl
    skip:

    dec sp
    jnz len_loop
    inc cx
    cmp cx, 64
    jl part_loop    
    jmp $

color:
    db 0x43, 0x42, 0x06, 0x00

brush:
    dw  0x030A, 0x37BE, 0x2F9B, 0x072B, 0x0E3C, 0xF59B, 0x8A91, 0x1B0B
    dw  0x0EBD, 0x9378, 0xB83E, 0xB05A, 0x70B5, 0x0280, 0xD0B1, 0x9CD2
    dw  0x2093, 0x209C, 0x3D11, 0x26D6, 0xDF19, 0x97F5, 0x90A3, 0xA347
    dw  0x8AF7, 0x0859, 0x29AD, 0xA32C, 0x7DFC, 0x0D7D, 0xD57A, 0x3051
    dw  0xD431, 0x542B, 0xB242, 0xB114, 0x8A96, 0x2914, 0xB0F1, 0x532C
    dw  0x0413, 0x0A09, 0x3EBB, 0xE916, 0x1877, 0xB8E2, 0xAC72, 0x80C7
    dw  0x5240, 0x8D3C, 0x3EAF, 0xAD63, 0x1E14, 0xB23D, 0x238F, 0xC07B
    dw  0xAF9D, 0x312E, 0x96CE, 0x25A7, 0x9E37, 0x2C44, 0x2BB9, 0x2139


times 510 - ($-$$) db 0
DB 0x55
DB 0xAA

mona.jpg

Sobieh
quelle
6
Oh hey, eine Antwort, die die Punktzahl in der Frage übertrifft (unter der Annahme einer genauen Byteanzahl). Nett!
Draco18s
Willkommen bei PPCG! wundervoller erster Beitrag.
Taylor Scott
Sie können bis zu 245 Bytes reduzieren , wenn Sie nutzlos entfernen xor dx,dxund ändern mov bp,0xa000; mov es,bpzu push 0xa000; pop es.
Ruslan
1
Es ist nicht 8086. 8086 hat keinePUSH imm
14m2
1
Grundlegende Optimierung auf 240 paste.ubuntu.com/26272648
l4m2
18

Excel VBA 32-Bit, 1011 720 Bytes

Revision 49; Δ Score = 291 Bytes

Golf gespielt

Volle SubRoutine, die keine Eingaben macht und die Mona Lisa an das ActiveSheetObjekt in der Reichweite ausgibt [A1:DX96].

Es gab eine Menge schwarzer Magie beteiligt Golf spielen diese bis zu seinem aktuellen Zustand, - der Note, einige der Tricks beteiligt sind prep Pixel - Kunst , Bitfarben Verschiebung implizite Typumwandlung , und base64Kompression Bytes als ein KomprimierenString .

Sub M
h Cells,0
t="5¼-™):󙈏"+vbTab+"»‘v¶<®Xn³"+chr(0)+"~ίšÐ‘š;$ÔÝ•óŽ¡¡EˆõW'«¡*{ú{Óx.OÒ/R)°@¯ˆ”'®ïQ*<¹çu¶àªp~ÅP>‹:<­«a°;!¾y­›/,”Ì#¥œ5*B)·7
s=4057*2^19
j=127
For p=0To 63
w=(Asc(Mid(t,2*p+1))+2)*256&+Asc(Mid(t,2*p+2))+2
s=s And-4^8Or w
x=255And w
y=255And w/2^8-.5
For l=1To(64-p)*32
c=s And-2^31
z=2^30And s
s=(1073741823And s)*2
s=IIf(z,s Or-2^31,s)And-1
If c Then:s=79764919Xor s:d=255And s
d=130And d
y=IIf(d,IIf(d=128,y-1And j,y),y+1And j)
x=IIf(d=2,x+1And j,IIf(d=130,x-1And j,x))
h[B2].Cells(y,x),Array(9036543,4562665,23205,0)(3And p)
Next l,p
h[97:999,DY:ZZ],0
End Sub
Sub h(r,c)
r.Interior.Color=c
r.RowHeight=48
End Sub

Hinweis: Diese Lösung wurde auf 32-Bit-Versionen von Excel VBA beschränkt, ebenso ^wie das LongLongTypliteral in 64-Bit-Versionen

Hinweis, The Second: Die Zeichenfolge in Zeile 3 ist kein Kommentar, da nicht gleichbedeutend mit"

Ausgabe

Gif zeigt die Ausgabe an, ActiveSheetwann Mim VBE- Direktfenster aufgerufen wird. Beachten Sie, dass dieses fig gif aufgrund von Dateigrößenbeschränkungen weniger Frames als tatsächlich produziert hat. Mona

Ungolfed

Ungolfed volle subRoutine, die keine Eingabe nimmt und die Mona Lisa unter Verwendung der oben beschriebenen Methode auf dem ActiveSheetObjekt erzeugt

Option Private Module
Option Compare Text
Option Explicit
Option Base 0


Public Sub MonaLisa()
    On Error GoTo 0

    Dim part As Integer, _
        length As Integer, _
        M As Long, _
        seed As Long, _
        dir As Long, _
        word As Long, _
        carry As Long, _
        bx As Byte, _
        by As Byte, _
        BRUSH, _
        COLOR

    Let COLOR = Array(&H89E2FF, &H459EE9, &H5AA5, 0)
    Let BRUSH = Array( _
            778, 14270, 12187, 1835, 3644, 62875, 35473, 6923, _
            3773, 37752, 47166, 45146, 28853, 640, 53425, 40146, _
            8339, 8348, 15633, 9942, 57113, 38901, 37027, 41799, _
            35575, 2137, 10669, 41772, 32252, 3453, 54650, 12369, _
            54321, 21547, 45634, 45332, 35478, 10516, 45297, 21292, _
            1043, 2569, 16059, 59670, 6263, 47330, 44146, 32967, _
            21056, 36156, 16047, 44387, 7700, 45629, 9103, 49275, _
            44957, 12590, 38606, 9639, 40503, 11332, 11193, 8505)

    Let dir = 0
    Let carry = 0
    Let seed = &H7EC80000

    Let Cells.Interior.Color = 0
    Let Cells.ColumnWidth = 2

    Call Range("A1:DX96").Select
    Let ActiveWindow.Zoom = True
    Call Range("A1").Select

    For part = 0 To 63 Step 1

        Call VBA.DoEvents

        Let word = BRUSH(part)
        Let seed = (seed And &HFFFF0000) Or word

        Let bx = word And 255
        Let by = Int(word / (2 ^ 8)) And 255

        For length = 0 To (64 - part) * 32 - 1 Step 1

            Let carry = seed And &H80000000
            Let M = seed And &H40000000
            Let seed = (seed And &H3FFFFFFF) * 2
            If M <> 0 Then Let seed = seed Or &H80000000

            Let seed = seed And &HFFFFFFFF

            If carry Then
                Let seed = seed Xor 79764919
                Let dir = Int(seed And 255)
            End If

            Select Case dir And 130
                Case 0:   Let by = Int(by + 1) And 127
                Case 2:   Let bx = Int(bx + 1) And 127
                Case 128: Let by = Int(by - 1) And 127
                Case 130: Let bx = Int(bx - 1) And 127
            End Select
            Let Cells(by + 1, bx + 1).Interior.Color = COLOR(part And 3)
        Next length
    Next part

    Let Range("97:999,DY:ZZ").Interior.Color=0

End Sub
Taylor Scott
quelle
4
Hey, schöne Animation!
Arnauld
@ Arnauld, danke: P es hat mehr Arbeit gekostet, als es hätte sein sollen
Taylor Scott
10

HTML + CSS + JavaScript (ES6), 499 Byte

  • HTML: 33 Bytes
  • CSS: 17 Bytes
  • JS: 678 ... 478 475 473 465 459 455 451 447 449 Bytes

Es ist nicht annähernd 250 Bytes, aber ich werde mich definitiv mit weniger als 500 Bytes zufrieden geben! Ein großes Dankeschön an @Arnauld und @Firefly, die mir geholfen haben, dieses Monster abzuspielen.

with(C.getContext`2d`)for(s=4057<<19,d=n=65;n--;)for(w=n-44?` ℹ⮹ⱄ鸷▧雎ㄮ꾝쁻⎏눽Ḕ굣㺯贼剀胇걲룢ᡷ㺻ਉГ匬냱⤔誖넔뉂含퐱け핺ൽ緼ꌬ⦭࡙諷ꍇ那韵�⛖㴑ₜₓ鳒킱ʀ炵끚렾鍸ຽᬋ誑฼ܫ⾛㞾̊`.charCodeAt(n):57113,s=s&~65535|w,x=w&255,y=w>>8,fillStyle="#"+["FFE289","000","A55A00","E99E45"][n&3],k=32*n;k--;fillRect(x,y,1,1))(s*=2)/2>>31&&(d=s^=79764919),D=d&128?-1:1,d&2?x=x+D&127:y=y+D&127
*{background:#000
<canvas id=C width=128 height=96>

Ersetzen Sie für einen größeren Maßstab das CSS durch Folgendes:

canvas { background: #000; image-rendering: pixelated; zoom: 3 }

Kommentierte Geschichte!

Ich hatte eine Menge Spaß beim Golfen mit Arnauld's Referenzcode, und davon können Sie hier einiges bekommen. Genießen!

darrylyeo
quelle
3
Gute Arbeit und vielen Dank für die gemeinsame Nutzung der Geschichte!
Arnauld
@ Arnauld Freut mich, die Herausforderung anzunehmen!
Darrylyeo
9

Befunge, 1131 1052 Bytes

"Dq~"1+00g"Ot"0"-R"0003"7/"727*"E1"5*\2*39*27*"\1"3*\2*:8-"ph"2*2\"N"2*"  =&~a"v
v  *83+"k~>"*524\*2"XS)"*2"E"-1:*2"YT"*2"j0"\+94*3"G}"+"%~)"8*2\+"%~E"-7:+" w"+<
>"V\"2*\2*"@"2*"R/"3*">~/"+56*"Y"2*"##`"2*\5*"1K"2*"%O"2*",+!_"2*25*\"{ "+"+<{"v
v"/~Y"+"y~G"+"%~"*5"1"*55*2"k"+98+9:*3"1"*2\*3";i"*2\+"7~@Z>x"*3"?"+92+" q"+" "<
>+",~"2*"}zQ1+BK"2*45*\45*",~s"+\25*9+9"~="+29+2*"wq"2*"r~I"+"@<c#"5*\45*"=o "+v
  v_,#!>#:<"P3 128 96 127"_v`+" k":p39+1:%*:*82<<0<<<\*5"%9D7"+")~"*2"g."+" }{"<
#@_:63p"@d~"03p2*13p043p0v^_:"@"%\"@"/p93g28*:*+^>\04>1-:93p3g2*+:v>g+\%:v>:"_"`
_3*55+,:2g.:1+2g.2+2g.1+v_:48**\1-:83p\83g:1g:23p\0v |:g39`\0p3g39<3v4\+4<^+1$$<
`v0:\%4g++77/"@"\%"@":::<^!:$$_\73g>0#p0#33g#:`#g^#< _$!#v_28*:*::0^>/2%8*-03p:v
">\:88vv%"@":\g38:\<_\73p\1-:!^v4:%\+g32::p31-*2+%2\*"@"% 4/"@":\++"C~":%\+g31:<
~v<\%*<>\"@"/77++p\0^!-g36:%**<>5*9++\:4/8%4*\2%+2*-23p:3 3g+\%:"="3*+\033g`28*v
">88*/7v>g!+53g2-!-153g2%+28*8^v2`\0\%2/2+*:*82:g34+*:*82<p34p33:-*2++%8\*+88< 8
^-1p++7<^35+*:*28\%**8*28-%2g35>#<*#2+#-:#!5#-3#3p#g1#3-#5!#+< >8+#:/#\4#*%#*^#<

Es gibt eine Reihe von Problemen, die das Problem in Befunge zu einer Herausforderung machen:

  1. Befunge verfügt nur über 2000 Byte Arbeitsspeicher (und das schließt den Quellcode ein), sodass wir nicht das gesamte Bild in den Arbeitsspeicher rendern können, bevor wir es ausgeben. Die Art und Weise, wie ich das umgehe, besteht darin, den Algorithmus 96-mal zu wiederholen, einmal für jede Zeile. In jedem Lauf werden nur die Pixel gespeichert, die für die aktuelle Zeile benötigt werden und am Ende des Laufs ausgegeben werden. Dies ermöglicht es uns, mit einem Pixelpuffer von nur 128 Bytes auszukommen.

  2. Befunge hat keinerlei Operationen. Viele der ANDOperationen können einfach mit einem Modulo-Operator emuliert werden (z. B. a AND 0x7Fdurch ersetzt werden a % 0x80). Dies XORerfordert jedoch einige recht komplizierte Bit-Manipulationen, die wir jeweils mit einem Byte durchführen müssen, indem wir einen Satz benutzerdefinierter Formeln verwenden, die fest codiert sind, um die vier benötigten Bytes zu verarbeiten. Zur Berechnung verwenden a XOR 0xC1wir beispielsweise die Formel:a + 0xC1 - (a/64%4*64 + a%2)*2

  3. Obwohl Befunge per se keine Einschränkung darstellt, ist die Schnittstelle von TIO nicht in der Lage, erweiterte ASCII-Zeichen in der Quelle zu verarbeiten, was der einfachste Weg gewesen wäre, die Pinsel- und Farbtabellen zu speichern. Ich arbeite daran, indem ich diese Tabellen als eine Liste von Zahlen auf dem Stapel generiere und dann eine kleine Initialisierungsschleife habe, die die Werte vom Stapel in den Speicher kopiert. Ein beträchtlicher Teil meiner Zeit verbrachte ich mit dem Golfen an diesem Tisch, der die ersten fünfeinhalb Codezeilen einnimmt.

Leider ist es trotz aller Bemühungen, den Code mit TIO kompatibel zu machen, und meiner Wahl eines Dateiformats, das aus TIO ( PPM ) extrahiert werden kann, einfach zu langsam, um es innerhalb des Zeitlimits von 60 Sekunden fertig zu stellen (wahrscheinlich 96-maliges Ausführen des Algorithmus) hilft nicht). Da das Bild jedoch zeilenweise generiert wird, sollten Sie immer noch genug von der Ausgabe erhalten, um fast die Hälfte des Bildes wiederherzustellen.

Probieren Sie es online!

Wenn Sie keinen lokalen PPM-Datei-Viewer haben, können Sie mit einem der vielen Online-Konverter problemlos in ein anderes Format konvertieren. Ein Beispiel ist Convertio .

James Holderness
quelle
Wahrscheinlich nicht das einfachste Werkzeug für den Job. Gut gemacht!
Arnauld
7

Python 3, 544 536 523 519 518 Bytes

from tkinter import*
s=32456<<16
d=0
b="#000"
a=Canvas(Tk(),w=128,he=96,bg=b)
a.pack()
for p in range(64):w=ord("̊㞾⾛ܫ฼誑ᬋຽ鍸렾끚炵ʀ킱鳒ₓₜ㴑⛖\udf19韵那ꍇ諷࡙⦭ꌬ緼ൽ핺け퐱含뉂넔誖⤔냱匬Гਉ㺻ᡷ룢걲胇剀贼㺯굣Ḕ눽⎏쁻꾝ㄮ雎▧鸷ⱄ⮹ℹ"[p]);s=s&~65535|w;*e,=divmod(w,256)[::-1];exec("c=s&8<<28>0;s=s*2^79764919*c;d=[d,s&255][c];e[d&2<1]=e[d&2<1]+(d&128<1)*2-1&127;a.create_line(*e,e[0]+1,e[1]+1,f=['#FFE289','#E99E45','#A55A00',b][p&3]);"*(64-p)*32)

Dies ist eine weitere abgespeckte Version von CCB60s Python-Übersetzung der Referenzimplementierung. Ich habe ursprünglich eine große Hex-Zahl verwendet, um den Pinsel des Algorithmus darzustellen, aber später wurde mir klar, dass meine unbegründete Annahme, dass eine Unicode-Zeichenfolgendarstellung in Python nicht funktionieren würde, falsch war.

Ursprünglich dachte ich, meine Byteanzahl sei erheblich niedriger, aber wie nur in ASCII angegeben , habe ich nicht daran gedacht, die Unicode-Zeichen als mehr als ein Byte zu zählen.

Ausgabe (128 x 96)

Mona lisa in tk fenster

Identisch mit dem CCB60-Ausgang.

notjagan
quelle
Dies sind 518 Bytes, nicht 396
ASCII.
@ Nur ASCII Ich habe vergessen, die Unicode-Zeichen als mehr als ein Byte zu zählen. Uff. Kein Wunder, dass die
Byteanzahl
7

Java 7, 681 677 675 626 612 610 Bytes

Object l(){BufferedImage g=new BufferedImage(128,96,1);String b="̊㞾⾛
ܫ\u0E3C\uF59B誑ᬋຽ鍸렾끚炵ʀ킱鳒ₓₜ㴑⛖\udf19韵那ꍇ諷࡙⦭ꌬ緼ൽ핺け퐱含뉂넔誖⤔냱匬Гਉ
\uE916ᡷ룢걲胇剀贼㺯굣Ḕ눽⎏쁻꾝\u312E雎▧鸷ⱄ\u2BB9";for(int 
s=0x7EC80000,d=0,x,y,z=130,u,w,c,r=255,t=127,p=0,o;p<64;p++)
{w=b.charAt(p);s=s&0xFFFF0000|w;x=w&r;y=(w>>8)&r;for(o=0;o<(64-p)*32;o++)
{c=s&0x80000000;s<<=1;if(c!=0){s^=0x4C11DB7;d=s&r;}x=(u=d&z)==2?x+1&t:u==z?
x-1&t:x;y=u==0?y+1&t:u==128?y-1&t:y;if(x<128&y<96)g.setRGB(x,y,new int[]
{0xFFE289,0xE99E45,0xA55A00,0}[p&3]);}}return g;}

Gibt das folgende Bild in der Auflösung 128x96 aus:
Bildbeschreibung hier eingeben

Ich weiß, es ist nicht einmal in der Nähe von 250 Bytes, aber hey, es ist Java

-2 Bytes dank Zacharý

Twometer
quelle
Nun, es sieht so aus, als hätte Sie niemand bei PPCG willkommen geheißen. Hallo, und willkommen bei PPCG! Netter Beitrag, ich habe nur zwei Formatierungsempfehlungen für Sie 1, die Überschrift ist, damit Bestenlisten vom Format sind #Language, <s>Old Scores</s> Score Bytesund 2 Sie Ihren Code ein bisschen lesbarer machen können, indem Sie <!-- language-all: lang-java -->vorher eine Sprachflagge des Formulars hinzufügen Ihr Code-Block
Taylor Scott
1
Hey, danke, dass du mich willkommen geheißen hast :)! Ich habe meinen Beitrag nun mit den von Ihnen vorgeschlagenen Verbesserungen bearbeitet.
Twometer
2
Kein Problem @ Twometer, es sieht gut aus und ich hoffe, Sie genießen Ihr Golfen
Taylor Scott
1
Zwei Bytes können rasiert werden: 0x04C11DB7=> 0x4C11DB7und 0x7f=> 127. Sei nicht verrückt, wenn es nicht gebraucht wird.
Zacharý
1
Ich liebe das "aber hey, es ist Java"
Jack
4

C #, 960 850 Bytes

using System.Drawing;_=>{var m = new Bitmap(128,96);Graphics.FromImage(m).FillRectangle(Brushes.Black,0,0,128,96);for(int s=0x7EC80000,d=0,p=0,w,x,y,l,c,t,n=127;p<64;++p){w=new[]{778,14270,12187,1835,3644,62875,35473,6923,3773,37752,47166,45146,28853,640,53425,40146,8339,8348,15633,9942,57113,38901,37027,41799,35575,2137,10669,41772,32252,3453,54650,12369,54321,21547,45634,45332,35478,10516,45297,21292,1043,2569,16059,59670,6263,47330,44146,32967,21056,36156,16047,44387,7700,45629,9103,49275,44957,12590,38606,9639,40503,11332,11193,8505}[p];s=s>>16<<16|w;x=w&255;y=w>>8&255;for(l=0;l++<(64-p)*32;){c=(int)(s&0x80000000);s*=2;if(c!=0){s^=79764919;d=s&255;}t=d&130;x=t==2?(x+1)&n:t==130?(x-1)&n:x;y=t<1?(y+1)&n:t==128?(y-1)&n:y;if(x<=n&y<96)m.SetPixel(x,y,Color.FromArgb((int)new[]{0xFFFFE289,0xFFE99E45,0xFFA55A00,0xFF000000}[p&3]));}}return m;}

Eine einfache Kopie des Pseudo-Codes mit etwas Golf. Es gibt immer noch eine Menge, die man spielen kann, aber ich wollte meine Antwort posten, um den Ball ins Rollen zu bringen.

Voll / Formatierte Version:

using System.Drawing;

class P
{
    static void Main()
    {
        System.Func<object, Bitmap> f = _ =>
        {
            var m = new Bitmap(128, 96);
            Graphics.FromImage(m).FillRectangle(Brushes.Black, 0, 0, 128, 96);

            for (int s = 0x7EC80000, d = 0, p = 0, w, x, y, l, c, t, n = 127; p < 64; ++p)
            {
                w = new[] { 778, 14270, 12187, 1835, 3644, 62875, 35473, 6923, 3773, 37752, 47166, 45146, 28853, 640, 53425, 40146, 8339, 8348, 15633, 9942, 57113, 38901, 37027, 41799, 35575, 2137, 10669, 41772, 32252, 3453, 54650, 12369, 54321, 21547, 45634, 45332, 35478, 10516, 45297, 21292, 1043, 2569, 16059, 59670, 6263, 47330, 44146, 32967, 21056, 36156, 16047, 44387, 7700, 45629, 9103, 49275, 44957, 12590, 38606, 9639, 40503, 11332, 11193, 8505 }[p];
                s = s >> 16 << 16 | w;
                x = w & 255;
                y = w >> 8 & 255;

                for (l = 0; l++ < (64 - p) * 32;)
                {
                    c = (int)(s & 0x80000000);
                    s *= 2;

                    if (c != 0)
                    {
                        s ^= 79764919;
                        d = s & 255;
                    }

                    t = d & 130;

                    x = t == 2 ? (x + 1) & n : t == 130 ? (x - 1) & n : x;
                    y = t < 1 ? (y + 1) & n : t == 128 ? (y - 1) & n : y;

                    if (x <= n & y < 96)
                        m.SetPixel(x, y, Color.FromArgb((int)new[] { 0xFFFFE289, 0xFFE99E45, 0xFFA55A00, 0xFF000000 }[p & 3]));
                }
            }

            return m;
        };

        f(null).Save("monaLisa.jpg");
    }
}
DerLethalCoder
quelle
1
var m = new Bitmap(128,96)AE IU WAUGH WY
CalculatorFeline
2
@CalculatorFeline Ich verstehe nicht?
TheLethalCoder
8
Möglich wegen der nicht benötigten Räume?
Zacharý
3

Python 2.7; 880 876 Bytes insgesamt (einschließlich Daten)

-4 Bytes auf 876 dank ZacharyT. (Mein Python-Interpreter mochte seinen Vorschlag nicht, die Leerzeichen zwischen den 80ern und sonst zu streichen.)

Taylor Scotts Vorschlag, den Pinsel in Base 10 einzufügen, ist ausgezeichnet, aber notjagan (in einem Kommentar) hat seinen Vorschlag unter Verwendung des erweiterten Integer-Formats von Python in Hex weiterentwickelt. Die Antwort von notjagan ist in Python 3 und ist eine solche Verbesserung von dem, was ich getan habe, dass er Anerkennung verdient. Ich hoffe, er wird es als separate Antwort posten.

Ausgabe in ein Tkinter-Fenster. Ohne Skalierung ist das Bild sehr klein, aber durch die Skalierung wird die Anzahl um etwa ein Dutzend Bytes erhöht.

B=[0x030A,0x37BE,0x2F9B,0x072B,0x0E3C,0xF59B,0x8A91,0x1B0B,
0x0EBD,0x9378,0xB83E,0xB05A,0x70B5,0x0280,0xD0B1,0x9CD2,
0x2093,0x209C,0x3D11,0x26D6,0xDF19,0x97F5,0x90A3,0xA347,
0x8AF7,0x0859,0x29AD,0xA32C,0x7DFC,0x0D7D,0xD57A,0x3051,
0xD431,0x542B,0xB242,0xB114,0x8A96,0x2914,0xB0F1,0x532C,
0x0413,0x0A09,0x3EBB,0xE916,0x1877,0xB8E2,0xAC72,0x80C7,
0x5240,0x8D3C,0x3EAF,0xAD63,0x1E14,0xB23D,0x238F,0xC07B,
0xAF9D,0x312E,0x96CE,0x25A7,0x9E37,0x2C44,0x2BB9,0x2139]
s=0x7EC80000
d=0x00
from Tkinter import *
m=Tk()
a=Canvas(m,w=128,he=96,bg='black')
a.pack()
for p in range(64):
 w=B[p];s=(s&0xFFFF0000)|w;x=w%256;y=w/256
 for t in range((64-p)*32):
  c=s&0x80000000;s=(s<<1)&0xFFFFFFFF;
  if c:s=s^0x04C11DB7;d=s&0xFF
  if d&2:x=(x+(-1if d&0x80 else 1))&0x7f
  else:y=(y+(-1if d&0x80 else 1))&0x7f
  a.create_line(x,y,x+1,y+1,f=['#FFE289','#E99E45','#A55A00','#000000'][p&3])
mainloop()

Hier ist nicht viel los, außer der Übersetzung in Python und ein bisschen grundlegendem Golfen. Manchmal sind bitweise Manipulationen kürzer, manchmal ganzzahlige Berechnungen. Ich konnte keinen Weg finden, mehr Logik in Listen oder Arrays zu packen. Der grundlegende Algorithmus ist bereits ziemlich dicht.

Mona Lisa als Tkinter-Ausgabe

CCB60
quelle
1
Nur als Formatierungstipp können Sie Ihren Code ein wenig lesbarer machen, indem Sie mit prettify.js sprachspezifische Hervorhebungen hinzufügen. Für Python sieht dieses Flag, das vor dem Codeblock hinzugefügt werden sollte, wie <!-- language-all: lang-py -->
Taylor Scott
2
Du brauchst keinen Raum zwischen dem 80und dem else. Und 0x00ist dasselbe wie 0, richtig?
Zacharý
2
Und Sie können den Abstand zwischen importund entfernen *.
Zacharý
1
Durch den Wechsel zu Python 3 und einige allgemeine Verbesserungen beim Golfen wurden 641 Byte erreicht .
Notjagan
1
Noch ein Byte auf 640.
notjagan
2

Tcl / Tk, 805

808 815 816 819 826 839 840 843

Mona

Immer noch der Verlierer, aber ich musste es tun! Vielleicht kann ich später mehr Golf spielen!

Nicht der Verlierer jetzt!

rename set S
rename expr E
pack [canvas .c -w 130 -he 98 -bg #000]
.c cr i 67 51 -i [S I [image c photo -w 128 -h 96]]
S s 0x7EC80000
S d 0
time {S s [E $s&0xFFFF0000|[S w 0x[lindex {. 30A 37BE 2F9B 72B E3C F59B 8A91 1B0B
EBD 9378 B83E B05A 70B5 280 D0B1 9CD2
2093 209C 3D11 26D6 DF19 97F5 90A3 A347
8AF7 859 29AD A32C 7DFC D7D D57A 3051
D431 542B B242 B114 8A96 2914 B0F1 532C
413 A09 3EBB E916 1877 B8E2 AC72 80C7
5240 8D3C 3EAF AD63 1E14 B23D 238F C07B
AF9D 312E 96CE 25A7 9E37 2C44 2BB9 2139} [incr p]]]]
S x [E $w&255]
S y [E $w>>8]
time {S c [E $s&1<<31]
S s [E $s<<1]
if \$c {S s [E $s^79764919]
S d [E $s&255]}
switch [E $d&130] {0 {S y [E $y+[S h 1&127]]}
2 {S x [E $x+$h]}
128 {S y [E $y-$h]}
130 {S x [E $x-$h]}}
$I p #[lindex {FFE289 E99E45 A55A00 000} [E $p-1&3]] -t $x $y} [E (65-$p)*32]} 64

Tcl / Tk, 1370

Sehr ungolfed Transliteration des Pseudo-Codes bevor der Golfspree begann! Die updateLinie ermöglicht es, die Zeichnung fortlaufend zu sehen!

pack [canvas .c -w 130 -he 98 -bg #000]
.c create i 67 51 -i [set p [image create photo -w 128 -h 96]]

set COLOR {FFE289 E99E45 A55A00 000000}

set BRUSH {
 0x030A 0x37BE 0x2F9B 0x072B 0x0E3C 0xF59B 0x8A91 0x1B0B 
 0x0EBD 0x9378 0xB83E 0xB05A 0x70B5 0x0280 0xD0B1 0x9CD2 
 0x2093 0x209C 0x3D11 0x26D6 0xDF19 0x97F5 0x90A3 0xA347 
 0x8AF7 0x0859 0x29AD 0xA32C 0x7DFC 0x0D7D 0xD57A 0x3051 
 0xD431 0x542B 0xB242 0xB114 0x8A96 0x2914 0xB0F1 0x532C 
 0x0413 0x0A09 0x3EBB 0xE916 0x1877 0xB8E2 0xAC72 0x80C7 
 0x5240 0x8D3C 0x3EAF 0xAD63 0x1E14 0xB23D 0x238F 0xC07B 
 0xAF9D 0x312E 0x96CE 0x25A7 0x9E37 0x2C44 0x2BB9 0x2139}

set seed 0x7EC80000
set dir 0x00

set part 0
while {$part<64} {
  set word [lindex $BRUSH $part]
  set seed [expr ($seed&0xFFFF0000)|$word]
  set bx [expr $word&0xFF]
  set by [expr $word>>8]

  set len 0
  while {$len<[expr (64-$part)*32]} {
    set carry [expr $seed&0x80000000]
    set seed [expr $seed<<1]

    if \$carry {
      set seed [expr $seed^0x04C11DB7]
      set dir [expr $seed&0xFF]
    }

    switch [expr $dir&0x82] {
      0 {
        set by [expr $by+1&0x7F]
      }
      2 {
        set bx [expr $bx+1&0x7F]
      }
      128 {
        set by [expr $by-1&0x7F]
      }
      130 {
        set bx [expr $bx-1&0x7F]
      }
    }

    $p put #[lindex $COLOR [expr $part&3]] -to $bx $by
    incr len
    update
  }
  incr part
}
Sergiol
quelle
2

Python 3 + matplotlib, 541

from pylab import*
B='ਃ븷鬯⬇㰎鯵醊ଛ봎碓㺸媰땰耂뇐튜錠鰠ᄽ혦᧟ꎐ䞣夈괩ⲣﱽ納竕儰㇔⭔䊲ᒱ隊ᐩⱓጄऊ묾ᛩ眘犬잀䁒㲍꼾掭ᐞ㶲輣節鶯⸱캖ꜥ㞞䐬뤫㤡'
s=32456<<16
d=0
i=zeros((256,256),'I')
for p in range(64):
    W=ord(B[p]);w=W>>8|W%256<<8;s=s&65535<<16|w;x=[w>>8,w&255]
    for l in range((64-p)*32):
        s*=2
        if s>>32:s=d=s^4374732215
        a=(-1)**(d>>7);b=d>>1&1;x[b]=x[b]+a&127;i[(*x,)]=[9036543,4562665,23205,0][p&3]
imsave('i',i.view('4B')[:96,:128,:3])

Das Bild wird als PNG-Datei "i" gespeichert. Um das Bild anzuzeigen, können Sie den imsave durch einen imshow und einen show für 545 Bytes ersetzen.

Bildbeschreibung hier eingeben

Ryan McCampbell
quelle
2

SmileBASIC, 454 447 444 Bytes

DIM C[5]C[1]=-7543C[2]=-1466811C[3]=-5940736S=32456<<16FOR P=-63TO.W=ASC("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"[-P])S=W+(S>>16<<16)C[4]=127AND W
C[0]=W>>8FOR L=0TO 31-P*32O=S
S=S<<1IF O<0THEN S=79764919XOR S:D=130AND S
T=D*2AND 4C[T]=127AND C[T]-(D>>6)+1GPSET C[4],C[0]+144,C[3AND P]NEXT
NEXT

Die Zeichenfolge von "x" enthielt einige ungültige Unicode-Zeichen, daher kann ich sie hier nicht posten. Hier sind die Zeichencodes in Dezimalzahl (nur das BRUSH-Array in umgekehrter Reihenfolge):8505, 11193, 11332, 40503, 9639, 38606, 12590, 44957, 49275, 9103, 45629, 7700, 44387, 16047, 36156, 21056, 32967, 44146, 47330, 6263, 59670, 16059, 2569, 1043, 21292, 45297, 10516, 35478, 45332, 45634, 21547, 54321, 12369, 54650, 3453, 32252, 41772, 10669, 2137, 35575, 41799, 37027, 38901, 57113, 9942, 15633, 8348, 8339, 40146, 53425, 640, 28853, 45146, 47166, 37752, 3773, 6923, 35473, 62875, 3644, 1835, 12187, 14270, 778

Bildbeschreibung hier eingeben

12Me21
quelle
Sie haben ein Bild der Ausgabe gepostet. Ist es möglich, ein Bild des Inhalts der "xx...xx"Zeichenfolge zu posten ?
Taylor Scott
1
Für die meisten Zeichen sind keine Symbole definiert, daher sieht es wirklich wie "xxxxxxxxxxx" aus. Ich kann aber eine Liste der Zeichencodes bekommen.
12. Mai,
Das könnte tatsächlich hilfreich sein - ich glaube, ich kann eine ähnliche Methode mit yabasic anwenden - oh, du hast es bereits getan - coolio
Taylor Scott
Es ist nicht sehr platzsparend, da (zumindest in UTF-8) die meisten davon als 3 oder mehr Bytes gespeichert werden. Aber es ist immer noch besser als hex und Sie können möglicherweise auch den Decoder kürzen.
12. Mai,
1

: R4, 764 Bytes

die quelle für run in : r4 github

Bildbeschreibung hier eingeben

^r4/lib/gui.txt
#c $FFE289 $E99E45 $A55A00 $000000
#b $37BE030A $072B2F9B $F59B0E3C $1B0B8A91 $93780EBD $B05AB83E $028070B5 $9CD2D0B1 $209C2093 $26D63D11 $97F5DF19 $A34790A3 $08598AF7 $A32C29AD $0D7D7DFC $3051D57A $542BD431 $B114B242 $29148A96 $532CB0F1 $0A090413 $E9163EBB $B8E21877 $80C7AC72 $8D3C5240 $AD633EAF $B23D1E14 $C07B238F $312EAF9D $25A796CE $2C449E37 $21392BB9
:m pick2 + $7f7f and dup $7f and over 8 >> 96 >? ( 2drop ; ) setxy ink@ a! ;
:s +? ( 2* ; ) 2* $4c11db7 xor rot drop dup 24 << 31 >> 1 or over $2 and 2 << 8 xor << rot rot ;
:d $100 $7ec80000 0 ( 64 <? )( dup $3 and 2 << 'c + @ ink dup >r 2* 'b + w@ $ffff and swap $ffff0000 and over or 64 r@ - 5 << ( 1? )( >r s swap m swap r> 1- ) drop nip r> 1+ ) 3drop ;
: cls d show 'exit >esc< ;

Ich benutze einen Trick, um den Zug ohne Bedingungen zu machen, transformiere Bit 8 in Vorzeichen und verschiebe mit Bit 2. Version mit Stapelnamen:

| PHREDA 2017
| https://codegolf.stackexchange.com/questions/126738/lets-draw-mona-lisa
^r4/lib/gui.txt

#color  $FFE289 $E99E45 $A55A00 $000000
#brush [
$030A $37BE $2F9B $072B $0E3C $F59B $8A91 $1B0B
$0EBD $9378 $B83E $B05A $70B5 $0280 $D0B1 $9CD2
$2093 $209C $3D11 $26D6 $DF19 $97F5 $90A3 $A347
$8AF7 $0859 $29AD $A32C $7DFC $0D7D $D57A $3051
$D431 $542B $B242 $B114 $8A96 $2914 $B0F1 $532C
$0413 $0A09 $3EBB $E916 $1877 $B8E2 $AC72 $80C7
$5240 $8D3C $3EAF $AD63 $1E14 $B23D $238F $C07B
$AF9D $312E $96CE $25A7 $9E37 $2C44 $2BB9 $2139 ]

:movxy | dir seed bxy -- dir seed bxy 
  pick2 + $7f7f and
  dup $7f and
  over 8 >>
  96 >? ( 2drop ; )
  setxy ink@ a! ;

:step | dir bxy seed -- dir bxy seed
  +? ( 2* ; )
  2* $4c11db7 xor
  rot drop
  dup 24 << 31 >> 1 or
  over $2 and 2 << 8 xor <<
  rot rot ;

:draw
  $100      | dir
  $7ec80000 | seed
  0 ( 64 <? )(
    dup $3 and 2 << 'color + @ ink
    dup >r 2* 'brush + w@ $ffff and | dir seed brush
    swap $ffff0000 and over or      | dir bxy seed
    64 r@ - 5 << ( 1? )( >r         | dir bxy seed
        step swap movxy swap r> 1- ) drop nip
    r> 1+ ) 3drop ;

: cls draw show 'exit >esc< ;
Phreda
quelle
1

Yabasic, 790 779 Bytes

Eine Antwort, bei der keine Ein- und Ausgaben in ein neues Grafikfenster übernommen werden.

Open Window 128,96
j=127
s=4057*2^19
k=255
For p=-1To 63
Color Mid$("255,226,137233,158,069165,090,0000,0,0",1+And(3,p)*11,11)
If p<0Then Fill Circle 0,0,k:p=0Fi
w=Dec(Mid$("30A37BE2F9B072B0E3CF59B8A911B0B0EBD9378B83EB05A70B50280D0B19CD22093209C3D1126D6DF1997F590A3A3478AF7085929ADA32C7DFC0D7DD57A3051D431542BB242B1148A962914B0F1532C04130A093EBBE9161877B8E2AC7280C752408D3C3EAFAD631E14B23D238FC07BAF9D312E96CE25A79E372C442BB92139",4*p,4),16)
s=Or(And(-4^8,s),w)
x=And(k,w)
y=And(w/2^8,k)
For l=1To(64-p)*32
c=And(-2^31,s)
z=And(2^30,s)
s=And(1073741823,s)*2
t=s
If z Then t=Or(s,-2^31)Fi
s=And(-1,t)
If c Then s=Xor(79764919,s):d=And(k,s)Fi
d=And(130,d)
If d=0Then y=And(y+1,j)Fi
If d=2Then x=And(x+1,j)Fi
If d=128Then y=And(y-1,j)Fi
If d=130Then x=And(x-1,j)Fi
Dot x,y
Next
Next

Ausgabe

Das Folgende wird um den Faktor 8 skaliert

Mona.yab

Taylor Scott
quelle