Hãy vẽ Mona Lisa


39

Vào năm 2014, demoscener Jakub 'Ilmenit' Debski đã phát hành bản demo đồ họa thủ tục 250 byte (1) cho Atari XL có tên là Mona . Đó là vẽ bức tranh sau (2) :

mona

Nhiệm vụ của bạn là tạo ra cùng một bức tranh, sử dụng ngôn ngữ bạn chọn.


(1) Phân tích: 136 byte dữ liệu + 114 byte mã.
(2) Ảnh gốc là 128x96. Phiên bản trên được phóng to lên 256x192. Một vài pixel khác với bản gốc, nhưng đây là đầu ra dự kiến ​​với mã giả được mô tả trong thử thách này.

Làm sao?

Đây là . Mặc dù bạn được phép sử dụng bất kỳ phương pháp nào, nhưng kết quả tốt nhất có thể sẽ đạt được bằng cách sử dụng thuật toán gốc được mô tả bên dưới.

NB : Đoạn này không phải là một đặc điểm kỹ thuật mà là một mô tả chung. Vui lòng tham khảo mã giả và triển khai tham chiếu để biết chi tiết về thuật toán.

Hình ảnh được tạo thành từ 64 nét cọ ngẫu nhiên giả ( xem video này ), đạp xe qua các màu sau (ở định dạng thập lục phân RRGGBB):

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

Nền ban đầu được lấp đầy với màu thứ 4 (màu đen). Mỗi nét ngắn hơn nét trước.

Trình tạo giả ngẫu nhiên đang sử dụng Thanh ghi dịch chuyển phản hồi tuyến tính (LFSR) trên số nguyên 32 bit ban đầu được đặt thành 0x7EC80000và XOR'ed với 0x04C11DB7.

Mỗi đột quỵ được khởi tạo với giá trị 16 bit ghi đè lên các byte thấp nhất của hạt giống:

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
];

Những giá trị này cũng được sử dụng để thiết lập vị trí mới (bx, bởi) của bàn chải vào đầu của đột quỵ: bx được đưa ra bởi các byte trọng số thấp nhất và do được đưa ra bởi các byte quan trọng nhất.

Hướng của nét được cho bởi các bit # 1 và # 7 của hạt giống. (Xem câu lệnh SWITCH trong mã giả.)

Mã giả

Dưới đây là thuật toán mã giả, giả sử các mảng được lập chỉ mục 0, trong đó AND, ORXORcó nghĩa là các hoạt động bitwise.

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

Thực hiện tham khảo

Dưới đây là một triển khai tham chiếu vô căn cứ trong JavaScript.

Bạn cũng có thể xem một phiên bản hoạt hình ở đây .

Làm rõ và quy tắc

  • Đầu ra phải được cắt thành 128x96, mặc dù thuật toán rút ra bên ngoài khu vực này.
  • Nếu ngôn ngữ / nền tảng của bạn không thể xuất ra các màu chính xác được mô tả ở trên, bạn phải sử dụng các màu càng gần càng tốt.
  • Nếu bạn quyết định sử dụng một phương pháp thay thế, bạn vẫn phải tạo ra cùng một đầu ra chính xác.
  • Chỉ trong trường hợp: gửi mã lắp ráp 6502 ban đầu hoặc bất kỳ phiên bản chỉnh sửa nào đều không được phép.
  • Bạn có thể đánh bại 250 byte? Chúc bạn vẽ vui vẻ!

1
"Bạn được khuyến khích" là có vấn đề, bởi vì nếu làm như vậy mâu thuẫn với việc lưu byte, ai đó có nên làm như vậy hay không? Nó phải là "bạn phải" (làm điều đó ngay cả khi nó tốn byte) hoặc "bạn có thể" (chỉ làm điều đó nếu nó tiết kiệm byte).

1
Thông thường tôi nghĩ tốt hơn nên chia tùy chọn ascii thành một thử thách khác, nếu không thì vẫn có loại 2 thử thách phụ.
FryAmTheEggman

1
@FryAmTheEggman Ban đầu nó chỉ có nghĩa là đầu ra đồ họa và thêm tùy chọn ASCII này có lẽ là một ý tưởng tồi. Hy vọng rằng tôi sẽ không phá hỏng một số câu trả lời WIP bằng cách xóa nó ...
Arnauld

4
@ATaco Paint Starry Nigh là một thử thách mã với một mục tiêu khác (tái tạo hình ảnh càng sát càng tốt). Đây là một phức tạp kolmogorov đơn giản với một đầu ra không đổi.
Arnauld

1
Điều đó có thể hiểu được, Làm lại phiếu bầu gần gũi của tôi.
ATaco

Câu trả lời:


7

op86 x86, 227 224 223 byte

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

Hình: nhập mô tả hình ảnh ở đây


1
Bạn có phiền bao gồm một lời giải thích về điều này và một ảnh chụp màn hình của đầu ra - vì nó không phải là tự giải thích
Taylor Scott

Tôi có nên sử dụng máy ảnh hoặc môi trường ảo không, vì tôi chạy nó trên toàn màn hình và không chụp màn hình nữa
l4m2


1
0122 6681F7B71DC104 xor edi, 00001DB7lỗi được tìm thấy trong W32Dasm
l4m2

22

Hội 8086 - 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


6
Oh hey, một câu trả lời đánh bại số điểm trong câu hỏi (giả sử số byte chính xác). Tốt đẹp!
Draco18

Chào mừng đến với PPCG! bài đầu tiên tuyệt vời.
Taylor Scott

Bạn có thể giảm xuống còn 245 byte nếu bạn loại bỏ vô dụng xor dx,dxvà thay đổi mov bp,0xa000; mov es,bpthành push 0xa000; pop es.
Ruslan

1
Đó không phải là 8086. 8086 không cóPUSH imm
l4m2


18

Excel VBA 32-bit, 1011 720 byte

Sửa đổi 49; Δ Điểm = 291 Bytes

Chơi gôn

Toàn bộ Subthói quen không có đầu vào và đầu ra Mona Lisa cho ActiveSheetđối tượng trên phạm vi [A1:DX96].

Có một rất nhiều của ma thuật đen tham gia chơi golf xuống này để tình trạng hiện thời của nó, - chú ý, một số các thủ thuật liên quan là điểm ảnh chuẩn nghệ thuật , bit thay đổi màu sắc chuyển đổi kiểu ngầm ,base64nén nén byte như mộtString .

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

Lưu ý: Giải pháp này đã được giới hạn ở các phiên bản Excel VBA 32 bit như ^LongLongloại chữ trong các phiên bản 64 bit

Lưu ý, Thứ hai: Chuỗi là dòng 3 không phải là một nhận xét vì không tương đương với"

Đầu ra

Gif hiển thị ouput đến ActiveSheetkhi Mđược gọi trong cửa sổ VBE ngay lập tức. Lưu ý rằng do giới hạn kích thước tệp, hình gif này có ít khung hơn so với thực tế được sản xuất. Mona

Bị đánh cắp

Quy subtrình đầy đủ không cần thiết mà không có đầu vào và tạo ra lisa mona bằng phương pháp được mô tả ở trên trên ActiveSheetđối tượng

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

4
Hey, hoạt hình đẹp!
Arnauld

@Arnauld, cảm ơn: P phải mất nhiều công sức hơn nó nên có
Taylor Scott

10

HTML + CSS + JavaScript (ES6), 499 byte

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

Không có gần 250 byte, nhưng tôi chắc chắn sẽ giải quyết dưới 500 byte! Rất cảm ơn @Arnauld và @Firefly đã giúp tôi đánh bại con quái vật này.

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>

Để có quy mô lớn hơn, hãy thay thế CSS bằng cách sau:

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

Lịch sử chú thích!

Tôi đã có một mã tham chiếu của Arnauld chơi golf, và bạn có thể lấy một số ở đây. Thưởng thức!


3
Công việc tốt đẹp và cảm ơn vì đã chia sẻ lịch sử!
Arnauld

@Arnauld Vui mừng khi nhận thử thách!
darrylyeo

9

Befunge, 1131 1052 byte

"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#*%#*^#<

Có một số vấn đề khiến điều này trở thành một vấn đề đầy thách thức trong Befunge:

  1. Befunge chỉ có 2000 byte bộ nhớ để hoạt động (và bao gồm mã nguồn), vì vậy không có cách nào chúng ta có thể kết xuất toàn bộ hình ảnh vào bộ nhớ trước khi xuất ra. Cách tôi làm việc xung quanh điều này là bằng cách liên tục chạy thuật toán 96 lần, một lần cho mỗi dòng. Mỗi lần chạy chỉ lưu trữ các pixel cần thiết cho dòng hiện tại, sau đó là đầu ra khi kết thúc hoạt động. Điều này cho phép chúng ta có được với bộ đệm pixel chỉ 128 byte.

  2. Befunge không có hoạt động bit nào. Nhiều ANDthao tác có thể được mô phỏng đơn giản bằng toán tử modulo (ví dụ: a AND 0x7Fcó thể thay thế bằng a % 0x80). Tuy nhiên, XORyêu cầu một số thao tác bit khá phức tạp, chúng ta phải xử lý một byte mỗi lần, sử dụng một bộ công thức tùy chỉnh được mã hóa cứng để xử lý bốn byte chúng ta cần. Ví dụ: để tính toán a XOR 0xC1, chúng tôi sử dụng công thức:a + 0xC1 - (a/64%4*64 + a%2)*2

  3. Mặc dù không phải là giới hạn của Befunge per se, giao diện trên TIO không có khả năng xử lý các ký tự ASCII mở rộng trong nguồn, đây là cách dễ nhất để lưu trữ cọ và bảng màu. Tôi xử lý vấn đề này bằng cách tạo các bảng đó dưới dạng danh sách các số trên ngăn xếp, sau đó có một vòng lặp khởi tạo nhỏ để sao chép các giá trị từ ngăn xếp vào bộ nhớ. Một phần đáng kể thời gian của tôi đã dành cho việc chơi golf trên bàn này, nó chiếm tới năm dòng rưỡi mã đầu tiên.

Thật không may, mặc dù tôi đã nỗ lực để làm cho mã tương thích với TIO và việc tôi chọn định dạng tệp có thể được trích xuất từ ​​TIO ( PPM ), nhưng quá chậm để hoàn thành trong giới hạn thời gian 60 giây (có thể chạy thuật toán 96 lần không giúp đỡ). Nhưng vì nó tạo ra từng dòng hình ảnh, bạn vẫn nên có đủ đầu ra để phục hồi gần một nửa hình ảnh.

Hãy thử trực tuyến!

Nếu bạn không có trình xem tệp PPM cục bộ, bạn có thể dễ dàng chuyển đổi sang định dạng khác bằng một trong nhiều trình chuyển đổi trực tuyến. Một ví dụ là Convertio .


Có lẽ không phải là công cụ dễ dàng nhất cho công việc. Làm tốt!
Arnauld

7

Python 3, 544 536 523 519 518 byte

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)

Đây là phiên bản rút gọn của bản dịch Python của CCB60 về triển khai tham chiếu. Ban đầu tôi đã sử dụng một số hex lớn để biểu thị cọ của thuật toán, nhưng sau đó tôi nhận ra rằng giả định vô căn cứ của tôi rằng biểu diễn chuỗi Unicode sẽ không hoạt động trong Python là sai.

Ban đầu tôi nghĩ rằng số byte của tôi thấp hơn đáng kể, nhưng như chỉ ASCII chỉ ra, tôi không nhớ đếm các ký tự Unicode là nhiều hơn một byte.

Đầu ra (128 x 96)

Mona Lisa trong cửa sổ tk

Đồng nhất với đầu ra của CCB60.


Đây là 518 byte, không phải 396
ASCII - chỉ

Chỉ có ASCII Tôi quên đếm các ký tự Unicode là nhiều hơn một byte. Ôi. Không có gì ngạc nhiên khi số byte dường như rất thấp ...
notjagan

7

Java 7, 681 677 675 626 612 610 byte

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;}

Xuất hình ảnh sau ở độ phân giải 128x96:
nhập mô tả hình ảnh ở đây

Tôi biết nó thậm chí không gần 250 byte nhưng đó là java

-2 byte nhờ Zacharý


Chà, có vẻ như không ai chào đón bạn đến PPCG, vì vậy xin chào, và chào mừng bạn đến với PPCG! Bài đăng hay, tôi chỉ có hai đề xuất định dạng cho bạn 1, tiêu đề là, vì mục đích có bảng xếp hạng được cho là có định dạng #Language, <s>Old Scores</s> Score Bytesvà 2 bạn có thể làm cho mã của mình dễ đọc hơn một chút bằng cách thêm vào cờ ngôn ngữ của biểu mẫu <!-- language-all: lang-java -->trước khối mã của bạn
Taylor Scott

1
Hey cảm ơn bạn đã chào đón tôi :)! Bây giờ tôi đã chỉnh sửa bài viết của mình với những cải tiến mà bạn đề xuất.
Twometer

2
Không có vấn đề gì @ Twometer, nó trông rất tuyệt và hy vọng bạn thích chơi golf của mình
Taylor Scott

1
Hai byte có thể được cạo: 0x04C11DB7=> 0x4C11DB70x7f=> 127. Đừng phát điên khi không cần thiết.
Zacharý

1
Tôi yêu cái đó nhưng nó là Java,
Jack

4

C #, 960 850 byte

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;}

Một bản sao thẳng của mã giả với một số golf được thêm vào. Vẫn còn rất nhiều thứ có thể được đánh gôn nhưng tôi muốn đăng câu trả lời của mình để có được quả bóng lăn.

Phiên bản đầy đủ / được định dạng:

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");
    }
}

1
var m = new Bitmap(128,96)AE IU WAUGH WY
Máy

2
@CalculatorFeline Tôi không hiểu?
TheLethalCoder

8
Có thể vì những không gian không cần thiết?
Zacharý

3

Trăn 2.7; Tổng số 880 876 byte (bao gồm cả dữ liệu)

-4 byte đến 876 nhờ ZacharyT. (Người phiên dịch trăn của tôi không thích đề nghị của anh ta bỏ khoảng trống giữa thập niên 80 và những người khác).

Đề xuất của Taylor Scott để đặt cọ vào Base 10 là tuyệt vời, nhưng notjagan (trong một bình luận) đã đưa đề xuất của anh ấy thêm một bước nữa, sử dụng định dạng số nguyên mở rộng của python trong hex. Câu trả lời của notjagan là trong Python 3, và đó là một sự cải tiến so với những gì tôi đã làm mà anh ấy xứng đáng nhận được. Tôi hy vọng anh ấy sẽ đăng nó như một câu trả lời riêng biệt.

Xuất ra một cửa sổ Tkinter. Không có tỷ lệ, hình ảnh rất nhỏ, nhưng tỷ lệ tăng thêm khoảng một chục byte cho số đếm.

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()

Không có nhiều thứ đang diễn ra ở đây ngoại trừ việc dịch sang Python và chơi gôn cơ bản. Đôi khi các thao tác bit-khôn là ngắn hơn, đôi khi là toán nguyên. Tôi không thể tìm ra cách đóng gói logic hơn vào danh sách hoặc mảng. Các thuật toán cơ bản đã khá dày đặc.

Mona Lisa là đầu ra Tkinter


1
Chỉ cần một mẹo định dạng, bạn có thể làm cho mã của mình dễ đọc hơn một chút bằng cách thêm tô sáng cụ thể bằng ngôn ngữ bằng cách sử dụng prettify.js. Đối với python, cờ này, cần được thêm vào trước khi bạn mã khối, trông giống như<!-- language-all: lang-py -->
Taylor Scott

2
Bạn không cần khoảng trống giữa 80's và else'. Và, 0x00giống như 0, phải không?
Zacharý

2
Và bạn có thể loại bỏ khoảng trống giữa import*.
Zacharý

1
Giảm xuống còn 641 byte bằng cách chuyển sang Python 3 và thực hiện một số cải tiến chơi gôn nói chung.
notjagan


2

Tcl / Tk, 805

808 815 816 819 826 839 840 843

Mona

Vẫn là kẻ thua cuộc, nhưng tôi phải làm điều đó! có thể tôi có thể chơi nó sau

Không phải là kẻ thua cuộc bây giờ!

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

Phiên âm rất vô căn cứ của mã giả trước khi cuộc đánh gôn bắt đầu! Các updatedòng làm cho có thể xem các bản vẽ đang được thực hiện dần dần!

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
}

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])

Điều này sẽ lưu hình ảnh dưới dạng tệp png "i". Để hiển thị hình ảnh, bạn có thể thay thế imsave bằng imshow và hiển thị cho 545 byte.

nhập mô tả hình ảnh ở đây


2

SmileBASIC, 454 447 444 byte

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

Chuỗi "x" s có một số ký tự unicode không hợp lệ, vì vậy tôi không thể đăng nó ở đây. Dưới đây là các mã ký tự ở dạng thập phân (chỉ là mảng BRUSH ngược lại):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

nhập mô tả hình ảnh ở đây


Bạn đã đăng một hình ảnh của đầu ra, có thể đăng một hình ảnh của nội dung của "xx...xx"chuỗi?
Taylor Scott

1
Hầu hết các nhân vật không thực sự có biểu tượng được xác định cho họ, vì vậy nó thực sự trông giống như "xxxxxxxxxxx". Tôi có thể nhận được một danh sách các mã ký tự mặc dù.
12Me21

Điều đó thực sự có thể hữu ích - Tôi nghĩ rằng tôi có thể sử dụng một phương pháp tương tự với yabasic - oh, bạn đã làm điều đó - coolio
Taylor Scott

Nó không hiệu quả về không gian vì (ít nhất là trong UTF-8) hầu hết những thứ đó được lưu dưới dạng 3 byte trở lên. Nhưng nó vẫn tốt hơn hex và bạn cũng có thể rút ngắn bộ giải mã.
12Me21

1

: r4, 764 byte

nguồn để chạy trong : r4 github

nhập mô tả hình ảnh ở đây

^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< ;

Tôi sử dụng một mẹo để thực hiện di chuyển mà không có điều kiện, biến đổi bit 8 trong dấu hiệu và dịch chuyển với bit 2. phiên bản có tên ngăn xếp:

| 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< ;

1

Yabasic, 790 779 byte

Một câu trả lời không có đầu vào và đầu ra cho một cửa sổ đồ họa mới.

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

Đầu ra

Dưới đây được chia tỷ lệ 8

Mona.yab

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.