Chơi gôn ASCII-art


31

Hãy thử đánh golf tác phẩm nghệ thuật ascii này đại diện cho một người chơi golf:

      '\. . |> 18 >>
        \. '. |
       Ô >>. 'o |
        \. |
        / \. |
       / /. ' |
 js ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^

Nguồn: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm

Quy tắc:

  • Không cho phép đầu vào
  • Không cho phép tài nguyên bên ngoài
  • Đầu ra phải chính xác là văn bản này, được hiển thị bằng phông chữ đơn cách (bảng điều khiển hệ điều hành, bảng điều khiển JS, thẻ <pre>, ...), bao gồm cả ngắt dòng hàng đầu và dấu.
  • Dấu ngoặc kép hoặc dấu ngoặc kép được cho phép (bảng điều khiển JS thêm dấu ngoặc kép khi bạn xuất chuỗi, điều này không sao)

Câu trả lời tốt nhất sẽ là câu trả lời sử dụng ít ký tự trong bất kỳ ngôn ngữ nào.

Chúc vui vẻ!


2
"Chính xác văn bản này": bao gồm dòng trống ở đầu? bao gồm cả dòng trống ở cuối? với một dòng mới hay không? (Nghĩa là, 0, 1 hoặc 2 dòng mới ở cuối?)
Martin Ender

@ m.buettner đầu ra phải có chính xác một ngắt dòng hàng đầu và một ngắt dòng / dòng mới. (và trích dẫn nếu bạn không thể tránh chúng) :)
xem

1
ASCII đó trông giống như một con dế bắn vào tôi
Ông Alien

@ Mr.Alien Tôi đã thấy nó trong cuộc nói chuyện gần đây của Martin Kleppe: loadeck.com/aemkei/iêu (video: youtube.com/watch?v=zy-2ruMHdbU )
xem

Câu trả lời:


14

CJam, 62 ký tự

"Ⴀ지尦렒>Ä΀ྀ㸀⡅쇋蒧ʸ鿀ʃ케袧Ƽ蟀ʄ導뤷쀂萯Ű⋥ἀ਎밊耧台 ⢙⿶ꝍ㕟劢햟騤꩏脽啎"2G#b128b:c~

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

Chạy thử nghiệm

$ base64 -d > golf.cjam <<< IgHhgqDsp4DlsKbroJLujJ8+w4TOgOC+gOO4gOKhheyHi+iSp8q46b+AyoPsvIDvoIPuhKvooqfGvOifgMqE5bCO66S37ICC6JCvxbDii6XhvIDgqI7rsIrvgYvogKflj7DCoOKimeK/tuqdjeOVn+WKou2Wn+mopO+em+qpj+iEve6arOWVjiIyRyNiMTI4Yjpjfg==
$ wc -m golf.cjam
62 golf.cjam
$ cjam golf.cjam

      '\                   .  .                        |>18>>
        \              .         ' .                   |
       O>>         .                 'o                |
        \       .                                      |
        /\    .                                        |
       / /  .'                                         |
 jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$

Làm thế nào nó hoạt động

2G#b chuyển đổi chuỗi trước thành số nguyên bằng cách coi đó là số cơ sở-65536.

128b:cchuyển đổi số nguyên đó trở lại một chuỗi ( 110 byte ) bằng cách xem nó là số cơ sở 128, ~sau đó thực hiện:

"
^F'^@\^S.^B.^X|^@>^@1^@8^@>^@>^@
^H\^N.^I'^A.^S|^@
^GO^@>^@>^I.^Q'^@o^P|^@
^H\^G.&|^@
^H/^@\^D.(|^@
^G/^A/^B.^@')|^@
^A"2/{)iS*}%"jgs"'^7*'`'^51*N

(ký hiệu dấu mũ)

2/{)iS*}%

chia chuỗi thành cặp của hai ký tự và thực hiện các thao tác sau cho mỗi cặp: Pop ký tự thứ hai của chuỗi, chuyển đổi nó thành một số nguyên và lặp lại chuỗi " "đó nhiều lần.

Ví dụ, ".("trở thành ". ", bởi vì mã ký tự ASCII (là 40.

Cuối cùng,

"jgs"'^7*'`'^51*N

đẩy chuỗi "jgs", ký tự ^lặp lại 7 lần, ký tự `, ký tự ^lặp lại 51 lần và một dòng cấp.


1
Thực sự tuyệt vời, nhưng khi tôi lấy phiên bản 62ar từ pastebin và "dùng thử trực tuyến", một dòng ngắt bị thiếu trước dòng cuối cùng "jss ..."
xem

@xem: Bạn đã sao chép từ phần RAW Paste Data ? Nếu tôi sao chép mã được định dạng, tôi sẽ nhận được kết quả tương tự.
Dennis

15

Ruby, 107

Tôi nghĩ rằng tôi thực sự đã cố gắng "tạo" hình ảnh trong mã (thay vì sử dụng một số chức năng nén hiện có):

S=?\s*351+?^*60
"⠀鰇𗀈렜렟🀸쐺⠾𗁇롖鱠롢🁶⡷𓱿뢋鲝𛲞🂯⢰𗂹룁🃨⣩볲𗃳룸🄡⤢봪봬뤯鴰🅚⥛𚥝𙵞𜵟𘅧".chars{|q|S[511&r=q.ord]=(r>>10).chr}
puts S

Có một số ký tự không in được trong mảng đó.

Đây là chế độ xem hex của tệp, để hiển thị các ký tự không in được:

0000000: 533d 3f5c 732a 3335 312b 3f5e 2a36 300a  S=?\s*351+?^*60.
0000010: 22e2 a080 e9b0 87f0 9780 88eb a09c eba0  "...............
0000020: 9ff0 9f80 b8ef a0b9 ec90 baee 80bb efa0  ................
0000030: bcef a0bd e2a0 bef0 9781 87eb a196 e9b1  ................
0000040: a0eb a1a2 f09f 81b6 e2a1 b7f0 93b1 bfef  ................
0000050: a280 efa2 81eb a28b e9b2 9df0 9bb2 9ef0  ................
0000060: 9f82 afe2 a2b0 f097 82b9 eba3 81f0 9f83  ................
0000070: a8e2 a3a9 ebb3 b2f0 9783 b3eb a3b8 f09f  ................
0000080: 84a1 e2a4 a2eb b4aa ebb4 aceb a4af e9b4  ................
0000090: b0f0 9f85 9ae2 a59b f09a a59d f099 b59e  ................
00000a0: f09c b59f f098 85a7 222e 6368 6172 737b  ........".chars{
00000b0: 7c71 7c53 5b35 3131 2672 3d71 2e6f 7264  |q|S[511&r=q.ord
00000c0: 5d3d 2872 3e3e 3130 292e 6368 727d 0a70  ]=(r>>10).chr}.p
00000d0: 7574 7320 53                             uts S

Cảm ơn Ventero cho một số cải tiến lớn! (Về cơ bản, ông đã giảm 50% mã.)


Nỗ lực tốt đẹp! Tôi đã hy vọng câu trả lời như vậy, đó không chỉ là mã hóa ASCII;)
xem

1
Dòng thứ hai có thể 6.times{|i|S[i+1]=' '*55+?|}lưu 2 ký tự.
từ

@voidpigeon À cảm ơn. Tôi thực sự bắt đầu với điều đó, nhưng ban đầu tôi nghĩ rằng tôi cần inhiều hơn một lần. Nắm bắt tốt!
Martin Ender

2
Hy vọng bạn không phiền nếu tôi đề cập thêm một vài cách để rút ngắn điều này! S.fill{' '*55+?|}Thay vào đó, sử dụng sẽ tiết kiệm thêm một vài ký tự (bạn sẽ phải xác định S['']*7, thay đổi putsthành puts p,S,pvà trừ 1 khỏi tất cả các tọa độ y của bạn). Sau đó, bằng cách sử dụng varargs trong f ( def f(*p,c)), bạn có thể lưu các []lệnh gọi hàm. Oh, và bạn có thể thả ()xung quanh y,x.
Ventero

1
Nếu bạn tạo S một chiều, bạn có thể lưu thêm 55 ký tự;) Đây là mã nếu bạn không muốn tự làm.
Ventero

13

bash + iconv + mã máy DosBox / x86 (104 97 96 95 ký tự)

echo ↾각슈삨੽₲ɻ庲錿ʴ⇍罋곹삄ૃ蘊尧⺓⺂粘ㄾ㸸ਾ岈⺎➉⸠粓蜊㹏褾鄮漧粐蠊蝜꘮੼⾈葜꠮੼⾇⼠⺂ꤧ੼樠獧惇૳|iconv -futf8 -tucs2>o.com;dosbox o*

Tôi đề nghị đặt đoạn mã này vào một tập lệnh trong một thư mục trống, gần như đảm bảo rằng việc sao chép nó vào một thiết bị đầu cuối sẽ phá vỡ mọi thứ; thậm chí tốt hơn, bạn có thể lấy kịch bản ở đây đã sẵn sàng.

Sản lượng dự kiến: sản lượng dự kiến

Làm thế nào nó hoạt động

Phần bash chỉ là một trình khởi chạy sử dụng iconvđể "giải nén" một .comtệp từ các ký tự UTF-8 của tập lệnh và khởi chạy nó với DosBox.

Lưu ý rằng điều này đặt ra một số hạn chế về nội dung, vì không phải tất cả các chuỗi đầu vào có thể được hiểu là UCS-2 mà iconvkhông phàn nàn; ví dụ, vì một số lý do, nhiều thao tác liên quan đến thanh bxghi bị hỏng tùy thuộc vào nơi tôi sử dụng chúng, vì vậy tôi phải làm việc xung quanh vấn đề này nhiều lần.

Bây giờ, điều Unicode chỉ là tận dụng các quy tắc "đếm ký tự"; kích thước thực tế (tính bằng byte) của tập lệnh lớn hơn .COMtập tin gốc .

Các .comtập tin được giải nén là

00000000  be 21 01 ac 88 c2 a8 c0  7d 0a b2 20 7b 02 b2 5e  |.!......}.. {..^|
00000010  83 e0 3f 93 b4 02 cd 21  4b 7f f9 ac 84 c0 75 e4  |..?....!K.....u.|
00000020  c3 0a 0a 86 27 5c 93 2e  82 2e 98 7c 3e 31 38 3e  |....'\.....|>18>|
00000030  3e 0a 88 5c 8e 2e 89 27  20 2e 93 7c 0a 87 4f 3e  |>..\...' ..|..O>|
00000040  3e 89 2e 91 27 6f 90 7c  0a 88 5c 87 2e a6 7c 0a  |>...'o.|..\...|.|
00000050  88 2f 5c 84 2e a8 7c 0a  87 2f 20 2f 82 2e 27 a9  |./\...|../ /..'.|
00000060  7c 0a 20 6a 67 73 c7 60  f3 0a 0a 00              ||. jgs.`....|
0000006c

và dài 108 byte. Nguồn NASM cho nó là:

    org 100h

start:
    ; si: pointer to current position in data
    mov si,data
    ; load the character in al
    lodsb
mainloop:
    ; bx: repetition count
    ; - zero at startup
    ; - -1 after each RLE run
    ; - one less than each iteration after each "literal" run
    ; the constant decrement is not really a problem, as print
    ; always does at least one print, and there aren't enough
    ; consecutive literal values to have wraparound

    ; if the high bit is not set, we have a "literal" byte;
    ; we prepare it in dl just in case
    mov dl,al
    ; then check if it's not set and branch straight to print
    ; notice that bx=0 is fine, as print prints always at least one character
    ; test the top two bits (we need the 6th bit below)
    test al,0xc0
    ; to see if the top bit was set, we interpret it as the sign bit,
    ; and branch if the number is positive or zero (top bit not set)
    jge print
rle:
    ; it wasn't a literal, but a caret/space with a repetition count
    ; space if 6th bit not set, caret otherwise
    mov dl,' '
    ; exploit the parity bit to see if the 6th bit was set
    jnp nocaret
    mov dl,'^'
nocaret:
    ; lower 6 bits: repetition count
    ; and away the top bits and move in bx
    ; we and ax and not al because we have to get rid of the 02h in ah
    and ax,3fh
    xchg ax,bx
print:
    ; print bx times
    mov ah,2
    int 21h
    dec bx
    jg print
    ; read next character
    lodsb
    test al,al
    ; rinse & repeat unless we got a zero
    jnz mainloop
end:
    ret
data:
    ; here be data
    incbin "compressed.dat"
    ; NUL terminator
    db 0

Tất cả điều này chỉ là một bộ giải nén cho compressed.datđịnh dạng của nó như sau:

  • nếu bit cao không được đặt, hãy in ký tự nguyên trạng;
  • mặt khác, 6 bit thấp là số lần lặp lại và bit cao thứ hai chỉ định nếu nó phải in một khoảng trắng (bit không được đặt) hoặc dấu mũ (tập bit).

compressed.datlần lượt được tạo bằng tập lệnh Python từ văn bản gốc.

Toàn bộ điều có thể được tìm thấy ở đây .


10

Con trăn, 156

print'''
%6s'\%19s.  .%24s|>18>>
%8s\%14s.%9s' .%19s|
%7sO>>%9s.%17s'o%16s|
%8s\%7s.%38s|
%8s/\%4s.%40s|
%7s/ /  .'%41s|
 jgs'''%(('',)*19)+'^'*7+'`'+'^'*51

Điều này sử dụng định dạng chuỗi với đệm không gian cho một số nén cơ bản.


7

PHP, 147

Điều này chạy trên dòng lệnh và xuất trực tiếp ra bàn điều khiển:

php -r 'echo gzinflate(base64_decode("41IAA/UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"));'

6

Perl - 127 129 130 132 135 137 145

print q(
6'\19.2.24|>18>>
8\14.9'1.19|
7O>>9.17'o16|
8\7.38|
8/\4.40|
7/1/2.'41|
1jgs^^^^^^^`0
)=~s/\d++(?!>)/$"x$&||'^'x51/reg

Cảm ơn Venterom.buettner vì sự giúp đỡ của họ trong việc tối ưu hóa RegEx của tôi.


Bạn có thể lưu một ký tự vớis/\d+(?!8?>)/%$&s/rg
Ventero

@Ventero cảm ơn bạn đã gợi ý.
core1024

2
Bạn có thể lưu một số khác bằng cách sử dụng bộ định lượng sở hữu :/\d++(?!>)/
Martin Ender

@ m.buettner Tôi không biết điều đó. Học những điều mới mỗi ngày :)
core1024

4

GCC C - 203 byte

Tôi hình dung tôi sẽ có một số niềm vui với cái này. Điều này biên dịch trên phiên bản MinGW của tôi và xuất ra văn bản dự kiến.

Khoảng trắng được thêm vào cho rõ ràng.

char*v="\n ú'\\ í.  . è|>18>>\n ø\\ ò. ÷' . í|\n ùO>> ÷. ï'o ð|\n ø\\ ù. Ú|\n ø/\\ ü. Ø|\n ù/ /  .' ×|\n jgs^ù`^Í\n";
main(g,o,l){
    for(;*v;
        g=!g&*v<0&l?-*v++:g){
        v+=!(l=*v-35);
        putchar((g-=g>0)?o:(o=*v++));
    }
}

Không có trang web dán mã trực tuyến nào cho phép sử dụng các ký tự byte đơn ngoài phạm vi ASCII, vì vậy tôi phải thoát chúng để lấy ví dụ đã tải lên. Mặc dù nó giống hệt nhau. http://codepad.org/nQrxTBlX

Bạn luôn có thể xác minh nó với trình biên dịch của riêng bạn.


4

LOLCODE, 590 ký tự

Cuz LOLCODE iz perfik ngôn ngữ 4 golfin: iz easy 2 compres a obfuscate an it is not verbose at all.

HAI
HOW DUZ I D C T
I HAZ A O
I HAZ A N ITZ 0
IM IN YR LOOP UPPIN YR N TIL BOTH SAEM N AN T
O R SMOOSH O AN C MKAY
IM OUTTA YR LOOP
FOUND YR O
IF U SAY SO
VISIBLE ""
VISIBLE SMOOSH "  '\" AN D " " 19 AN ".  ." AN D " " 24 AN "|>18>>" MKAY
VISIBLE "    \              .         ' .                   |"
VISIBLE "   O>>         .                 'o                |"
VISIBLE SMOOSH "    \       ." AN D " " 38 AN "|" MKAY
VISIBLE SMOOSH "    /\    ." AN  D " " 40 AN "|" MKAY
VISIBLE SMOOSH "   / /  .'" AN D " " 41 AN "|" MKAY
VISIBLE SMOOSH "jgs^^^^^^^`" AN D "^" 51 MKAY
VISIBLE ""
KTHXBYE

Tôi chắc chắn là dis werkz, nhưng tôi có một phiên dịch LOLCODE cho một http://repl.it dường như 2 không phải là funcshun.

(Tranzlashun hào phóng cung cấp bởi robot của http://speaklolcat.com vì tôi là người yêu thích lolcat)


Phiên bản mã được thụt lề, cách đều và nhận xét (bình luận LOLCODE bắt đầu bằng BTW):

HAI BTW All LOLCODE programs start with HAI
    HOW DUZ I D C T BTW Function declarations follow the form "HOW DUZ I <func-name>[ <func-arg1>[ <func arg2>[ ...]]]". In this case, D is a function that repeats a YARN C (YARN is the equivalent of string in LOLCODE) NUMBR T (NUMBR = int) times.
        I HAZ A O BTW Variable declarations follow the form "I HAZ A <var-name>"

        I HAZ A N ITZ 0 BTW Variables can be intialised when declared by appending " ITZ <init-value>" to the declaration 
        IM IN YR LOOP UPPIN YR N TIL BOTH SAEM N AN T BTW Loops follow the form "IM IN YR LOOP <action> TIL <condition>" where action and condition are "UPPIN YR N" and "BOTH SAEM N AN T", respectively, in this case
            O R SMOOSH O AN C MKAY BTW "R" assigns a new value to a variable. YARN (string) concatenation follows the form "SMOOSH <str-1> AN <str-2>[ AN <str-3>[...]] MKAY"
        IM OUTTA YR LOOP BTW "IM OUTTA YR LOOP" ends LOLCODE loops

        FOUND YR O BTW "FOUND YR <value>" returns a value
    IF U SAY SO BTW "IF U SAY SO" ends functions

    VISIBLE "" BTW "VISIBLE" prints its argument to stdout
    VISIBLE SMOOSH "  '\" AN D " " 19 AN ".  ." AN D " " 24 AN "|>18>>" MKAY BTW The function I wrote above only "pays off" in terms of characters added/saved when repeating 19 or more characters (the function call itself takes 8 characters, assuming a one-character first argument and a 2-digit second one; you need to factor in the added quotes (2 characters), spaces (4) and ANs (4) for 18 total extra characters; and possible SMOOSH/MKAY)
    VISIBLE "    \              .         ' .                   |"
    VISIBLE "   O>>         .                 'o                |"
    VISIBLE SMOOSH "    \       ." AN D " " 38 AN "|" MKAY
    VISIBLE SMOOSH "    /\    ." AN  D " " 40 AN "|" MKAY
    VISIBLE SMOOSH "   / /  .'" AN D " " 41 AN "|" MKAY
    VISIBLE SMOOSH "jgs^^^^^^^`" AN D "^" 51 MKAY
    VISIBLE ""    
KTHXBYE BTW "KTHXSBYE" ends LOLCODE programs

haha, nén tốt, thích nó: D
Joshua

3

Con trăn - 205 203 197

i="""
G^y`G^MsGgGj!G
G|!o'G.!H/!G/!M
G|!n.!J\G/!N
G|!l.!M\!N
G|!VoG'!W.!O>HO!M
G|!Y.!G'!O.!T\!N
G>H8G1G>G|!^.!H.!Y\G'!L
G""".replace('!','G ')
o=''
j=140
while j:j-=2;o+=ord(i[j+1])%70*i[j]
print o

Chuỗi ixen kẽ các ký tự trong nghệ thuật ascii với bội số của chúng, được biểu diễn dưới dạng các ký tự, tất cả theo thứ tự ngược lại. Ngoài ra, tôi tiết kiệm một chút dung lượng bằng cách sử dụng '!' thay vì 'G' trong ivà sau đó chỉ cần thay thế nó.


3

Con trăn (145)

'eJzjUgAB9RgFTKAHRthBjZ2hhZ0dF5SHphuhSx2rCTVQff52dlj0wPXm49IHtw+n83Do048hQRdCnz4QKuipE6sNqC8rvTgOAhLiSAdcAG/9Ri8='.decode('base64').decode('zip')

Không phải bản gốc, tôi biết.


2

Javascript ( ES6 ) 193 175 byte

Chỉnh sửa: Đã sửa đổi RegPack v3 để duy trì dòng mới, sử dụng for invòng lặp để lưu 3 byte và loại bỏ eval cho đầu ra giao diện điều khiển ẩn.

_="\nx'\\w{. z~|>18>>\n~\\~x.~ 'z{yx O>>~z 'owy~\\xzwxy~/\\{zw~yx / /  .'ww~ y jgs}`}}}}}}}^^\n~x  }^^^^^^^{   z .wy|\nx{{w~~";for(i of "wxyz{}~")with(_.split(i))_=join(pop())

Sử dụng nén unicode của xem: 133 ký tự

eval(unescape(escape('𧰽𘡜𫡸𙱜𧁷𮰮𘁺嵃🠱𞀾🡜𫡾𧁜屮𛡾𘀧𮡻𮑸𘁏🠾岍𘀧𫱷𮑾𧁜𮁺𭱸𮑾𛱜𧁻𮡷峀𮀠𛰠𛰠𘀮𙱷𭱾𘁹𘁪𩱳𯑠𯑽𯑽𯑽𯑞𧡜𫡾𮀠𘁽𧡞𧡞𧡞𧡻𘀠𘁺𘀮𭱹𯁜𫡸𮱻𭱾割𞱦𫱲𚁩𘁯𩠠𘡷𮁹𮡻𯑾𘠩𭱩𭁨𚁟𛡳𬁬𪑴𚁩𚐩𧰽𪡯𪑮𚁰𫱰𚀩𚐠').replace(/uD./g,'')))

tuyệt quá! <3 xử lý hậu kỳ của RegPack! psst, bạn có thể thực hiện trong 143b: xem.github.io/obfuscatweet
xem

@xem 143 ký tự, nhưng nhiều byte hơn
nderscore

vâng xin lỗi, 143 ký tự. Câu hỏi nói rằng bạn có thể đếm số ký tự. dù sao, cách tiếp cận của regpack thú vị hơn unicode-obfuscation;)
xem

2
FWIW, Mothereff.in/byte-corer là một công cụ đếm cả ký tự và byte (theo UTF-8).
Mathias Bynens

2

ES6, 155 ký tự

Chỉ cần thử cách tiếp cận anorher:

Chạy cái này trong bảng điều khiển JS của Firefox.

Mỗi ký tự unicode có dạng sau: \ uD8 [mã ascii] \ uDC [số lần lặp lại].

"𒠁𘀆𙰁𧀁𘀓𛠁𘀂𛠁𘀘𯀁🠁𜐁𞀁🠂𒠁𘀈𧀁𘀎𛠁𘀉𙰁𘀁𛠁𘀓𯀁𒠁𘀇𣰁🠂𘀉𛠁𘀑𙰁𫰁𘀐𯀁𒠁𘀈𧀁𘀇𛠁𘀦𯀁𒠁𘀈𛰁𧀁𘀄𛠁𘀨𯀁𒠁𘀇𛰁𘀁𛰁𘀂𛠁𙰁𘀩𯀁𒠁𘀁𪠁𩰁𬰁𧠇𨀁𧠳𒠁".replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))

(Chuỗi Unicode được tạo bằng: http://jsfiddle.net/LeaS9/ )


-3:.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
nderscore

oh, tuyệt, cảm ơn
xem

2

PHP

Phương pháp 1, đơn giản hơn (139 byte):

Sử dụng một chuỗi xì hơi trước.

<?=gzinflate(base64_decode('41IAA/UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmACwA='));?>

Phương pháp 2, mã hóa các khoảng trắng thành các chữ cái trong bảng chữ cái (192 byte):

<?=preg_replace_callback('#[D-NP-Zu]#',function($e){return str_repeat('a'<$e[0]?'^':' ',ord($e[0])-66);},"
H'\U.D.Z|>18>>
J\P.K' .U|
IO>>K.S'oR|
J\I.WS|
J/\F.ZR|
I/ /D.'ZS|
 jgs^^^^^^^`u
")?>

2

PowerShell, 192 188 119

 -join('̠§Üঠ®Ġ®ఠü¾±¸ľРÜܠ®Ҡ§ ®ঠüΠÏľҠ®ࢠ§ïࠠüРÜΠ®ጠüР¯ÜȠ®ᐠüΠ¯ ¯Ġ®§ᒠü êçóϞà᧞'[0..70]|%{"$([char]($_%128))"*(+$_-shr7)})

Phần trên có chứa một vài ký tự không. Đổ lục giác:

00: 002D 006A 006F 0069 │ 006E 0028 0027 008A  -join('
10: 0320 00A7 00DC 09A0 │ 00AE 0120 00AE 0C20  ̠§Üঠ®Ġ®ఠ
20: 00FC 00BE 00B1 00B8 │ 013E 008A 0420 00DC  ü¾±¸ľРÜ
30: 0720 00AE 04A0 00A7 │ 00A0 00AE 09A0 00FC  ܠ®Ҡ§ ®ঠü
40: 008A 03A0 00CF 013E │ 04A0 00AE 08A0 00A7  ΠÏľҠ®ࢠ§
50: 00EF 0820 00FC 008A │ 0420 00DC 03A0 00AE  ïࠠüРÜΠ®
60: 1320 00FC 008A 0420 │ 00AF 00DC 0220 00AE  ጠüР¯ÜȠ®
70: 1420 00FC 008A 03A0 │ 00AF 00A0 00AF 0120  ᐠüΠ¯ ¯Ġ
80: 00AE 00A7 14A0 00FC │ 008A 00A0 00EA 00E7  ®§ᒠü êç
90: 00F3 03DE 00E0 19DE │ 0027 005B 0030 002E  óϞà᧞'[0.
A0: 002E 0037 0030 005D │ 007C 0025 007B 0022  .70]|%{"
B0: 0024 0028 005B 0063 │ 0068 0061 0072 005D  $([char]
C0: 0028 0024 005F 0025 │ 0031 0032 0038 0029  ($_%128)
D0: 0029 0022 002A 0028 │ 002B 0024 005F 002D  )"*(+$_-
E0: 0073 0068 0072 0037 │ 0029 007D 0029       shr7)})

Sơ đồ mã hóa là RLE với độ dài được mã hóa trên 7 bit thấp hơn, là ký tự hiển thị.


1

Con trăn - 236

s=' ';print('\n'+6*s+"'\\"+19*s+'.  .'+24*s+"|>18>>\n"+8*s+'\\'+14*s+'.'+9*s+"' ."+19*s+"|\n       O>>"+9*s+'.'+17*s+"'o"+16*s+'|\n'+8*s+"\\       ."+38*s+'|\n'+8*s+"/\\    ."+40*s+"|\n       / /  ."+42*s+"|\n jgs^^^^^^^`"+51*'^'+'\n')

1

JS (190b) / ES6 (146b) / ES6 được đóng gói (118chars)

Chạy cái này trong bảng điều khiển JS:

JS:

"\n7'\\20.3.25|>18>>\n9\\15.10'2.20|\n8O>>10.9 9'o17|\n9\\8.39|\n9/\\5.41|\n8/2/3.'42|\n2jgs^^^^^^^`".replace(/\d+/g,function(a){return 18==a?a:Array(+a).join(' ')})+Array(51).join("^")+"\n"

ES6:

"\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)

ES6 được đóng gói: ( http://xem.github.io/obfuscatweet/ )

eval(unescape(escape('𘡜𫠶𙱜𧀱𞐮𜠮𜠴𯀾𜀾🡜𫠸𧁜𜐴𛠹𙰱𛠱𞑼𧁮𝱏🠾𞐮𜐷𙱯𜐶𯁜𫠸𧁜𝰮𜰸𯁜𫠸𛱜𧀴𛠴𜁼𧁮𝰯𜐯𜠮𙰴𜑼𧁮𜑪𩱳𝐸𨀱𜀱𧁮𘠮𬡥𬁬𨑣𩐨𛱜𩀫𛱧𛁡🐾𙰠𧠧𦱡🠵𜑼𜁝𛡲𩑰𩑡𭀨𨐥𝐱𚑼𯀱𞀩').replace(/uD./g,'')))

Cảm ơn @nderscore!


1
ES6 xuống còn 158: (giảm xuống còn 124 ký tự với nén unicode)"\n6'\\19.2.24|>18>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs^^^^^^^`".replace(/\d+/g,a=>18-a?' '.repeat(a):a)+"^".repeat(50)+"\n"
nderscore

ồ, tuyệt, tôi không biết lặp lại
xem

@nderscore đừng tiếc, thật tuyệt :) nhưng dòng cuối cùng có vẻ bị hỏng trong bảng điều khiển Firefox của tôi
xem

146: "\n6'\\19.2.24|>0>>\n8\\14.9'1.19|\n7O>>9.17'o16|\n8\\7.38|\n8/\\4.40|\n7/1/2.'41|\n1jgs58`101\n".replace(/\d+/g,a=>' ^'[a>51|0].repeat(a%51)||18)(stackexchange thêm các ký tự ngắt dòng vô hình sau 41 | \)
nderscore

Cảm ơn, tôi đã cập nhật câu trả lời và nó hoạt động. :) Tôi cũng đã thêm một anwser 158b, có thể bạn sẽ có một ý tưởng để cải thiện nó!
xem

1

ES6, 163b / 127 ký tự

Một cách tiếp cận khác, nhờ @nderscore.

Thực thi nó trong bảng điều khiển của Firefox

JS (163b):

"\n'\\..|>18>>\n\\. '.|\nO>>    .'o|\n\\.&|\n/\\.(|\n//.')|\njgs<`h\n".replace(/[^'`Og\n>\\,-8j-|]/g,a=>" ^"[a=a.charCodeAt(),a>53|0].repeat(a%53))

Đóng gói (127c):

eval(unescape(escape('𘡜𫠆𙱜𧀓𛠂𛠘𯀾𜐸🠾𧁮𒁜𧀎𛠉𙰁𛠓𯁜𫠇𣰾🠉𛠑𙱯𔁼𧁮𒁜𧀇𛠦𯁜𫠈𛱜𧀄𛠨𯁜𫠇𛰁𛰂𛠧𚑼𧁮𐑪𩱳🁠𪁜𫠢𛡲𩑰𫁡𨱥𚀯𦱞𙱠𣱧𧁮🡜𧀬𛐸𪠭𯁝𛱧𛁡🐾𘠠𧠢𦱡👡𛡣𪁡𬡃𫱤𩑁𭀨𚐬𨐾𝐳𯀰𧐮𬡥𬁥𨑴𚁡𙐵𜰩𚐠').replace(/uD./g,'')))

Tôi chắc chắn @nderscore sẽ tìm thấy sự cải tiến :)
xem

Tôi nghĩ rằng SE đang phá vỡ một số nhân vật trong giải pháp này. Sử dụng một cách tiếp cận tương tự với những gì tôi đã làm với câu trả lời khác của bạn, điều này giảm xuống còn 163: jsfiddle.net/2Fbxq/3
nderscore

Chà, đó là một sự cải tiến tuyệt vời (và một câu đố rất hay). Tôi cập nhật câu trả lời.
xem

1

Python, 70 ký tự UTF-16

挣摯湩㩧呕ⵆ㘱䕂
print砧RԘꁌ䘇䇘鶍薡ᶝ谗ꚋꄝᵍᆫ〵ﺍ癶㑘㗁ࣔᆷ஧楱返䄡鈛絆吠叐嘧䠟噣煺М쐤ຑꀀ䜮'.decode(稧楬b')

Tất nhiên có lẽ bạn sẽ phải sử dụng phiên bản hex:

23 63 6F 64 69 6E 67 3A 55 54 46 2D 31 36 42 45 0A 00 70 00 72 00 69 00 6E 00 74 00 27 78 9C E3 52 00 03 F5 18 05 4C A0 07 46 D8 41 8D 9D A1 85 9D 1D 17 8C 8B A6 1D A1 4D 1D AB 11 35 30 8D FE 76 76 58 34 C1 35 E7 E3 D4 08 B7 11 A7 0B 71 69 D4 8F 21 41 1B 92 46 7D 20 54 D0 53 27 56 1F 48 63 56 7A 71 1C 04 24 C4 91 0E 00 A0 2E 47 05 00 27 00 2E 00 64 00 65 00 63 00 6F 00 64 00 65 00 28 00 27 7A 6C 69 62 00 27 00 29 00

hoặc phiên bản cơ sở 64:

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

"Dòng" đầu tiên của chương trình khai báo mã hóa UTF-16. Toàn bộ tệp là UTF16, nhưng trình thông dịch Python luôn diễn giải dòng mã hóa trong ASCII (chính là nó #coding:UTF-16BE). Sau dòng mới, văn bản UTF-16 bắt đầu. Nó chỉ đơn giản là số tiền print'<data>'.decode('zlib')mà văn bản là phiên bản xì hơi của hình ảnh ASCII đích. Một số chăm sóc đã được thực hiện để đảm bảo rằng luồng không có người thay thế (sẽ làm hỏng việc giải mã).


1
Chà, dòng đầu tiên khiến tôi nghĩ "ồ tuyệt vời, ai đó đã tạo ra con trăn unicode"
seequ

tuyệt vời! Bạn có thể làm tương tự trong ~ 35b với UTF-32 không? :)
xem

zipthay vì zlibcó thể tiết kiệm một char.
Cees Timmerman

@xem: hầu hết các ký tự dừng là UTF-32 hợp lệ (ký tự phải là <= 0x10ffff).
nneonneo

1
@CeesTimmerman: thực sự là sự lựa chọn của zlib thay vì ziprất có mục đích. zliblà một số chẵn của các ký tự.
nneonneo

1

C # - 354 332

sử dụng hệ thống;
sử dụng System.IO;
sử dụng System.IO.Compression;
lớp X
{
    static void Main (chuỗi [] args)
    {
        var x = Convert.FromBase64String ("41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IU
        Console.WriteLine (StreamReader mới (DeflateStream mới (MemoryStream mới (x), CompressMode.Decompress)). ReadToEnd ());
    }
}

Một chút đánh gôn:

đang sử dụng hệ thống, sử dụng hệ thống (x), (NénMode) 0)). ReadToEnd ());}}

Điều đó không thực sự được đánh gôn nếu bạn vẫn có tên biến dài hơn một ký tự trong đó. Hoặc những thứ không cần thiết như string[] args.
Joey

Không có quy tắc, nhưng không có cách nào khác trong C # và mã cần phải biên dịch vì vậy, đây là cách ngắn nhất có thể.
Erez Robinson

1
Mainkhông cần phải có bất kỳ đối số nào, nó vẫn sẽ biên dịch (trái ngược với Java). Loại bỏ điều đó và nội tuyến xmang lại điều này cho 333. Bạn có thể lưu một byte khác bằng cách xóa khoảng trắng giữa các đối số trong DeflateStreamctor. Bạn có thể sử dụng dàn diễn viên cho thành viên enum : (CompressionMode)0, đưa chúng tôi xuống còn 324. Vì vậy, tôi cho rằng nó chưa phải là ngắn nhất có thể ;-)
Joey

Phải bạn là ..
Erez Robinson

1

bzip2, 116

Sau khi xem câu trả lời của CJAM, tôi nghĩ rằng câu hỏi này cũng đủ điều kiện.

$ wc -c golf.txt.bz2 
116 golf.txt.bz2
$ bzip2 -dc golf.txt.bz2

  '\                   .  .                        |>18>>
    \              .         ' .                   |
   O>>         .                 'o                |
    \       .                                      |
    /\    .                                        |
   / /  .'                                         |
jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

$

Tôi nghi ngờ bất kỳ giải thích thêm là cần thiết. :)


1
Sử dụng Bubblegum với DEFLATE sẽ giảm xuống còn 77 byte. Hãy thử trực tuyến!
Miles

0

C (gcc) , 190 byte

r(n,c){while(n--)putchar(c);}f(c){for(char*s="F'\\S.B.X|>18>>\nH\\N.I' .S|\nGO>>I.Q'oP|\nH\\G.ZL|\nH/\\D.ZN|\nG/ /B.'ZN |\n jgs^^^^^^^`";c=*s++;)c>64&&c<91&&c^79?r(c-64,32):r(1,c);r(51,94);}

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


0

Vim, 99 tổ hợp phím

63i^<Esc>0R jgs<C-O>7l`<Esc>O<Esc>55I <Esc>A|<Esc>Y5PA>18>><Esc>7|R'\<Down>\<Down><Left><Left>O>><Down><Left><Left>\<Down>\<Down><Left><Left><Left>/<Up>/<Down>/<Right><Right>.'<Up>.<Right><Up>.<Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right>.<Right><Right><Down>'<Right>.<Down><Right>'o

có lẽ là golf

Giải trình:

63i^<Esc>0R jgs<C-O>7l`<Esc>
Bottom line, 63 '^'s, replace the beginning with ' jgs', then move 7 caracters to the right and replace one character with '`'

O<Esc>55I <Esc>A|<Esc>
Above current line, add one line and insert 55 spaces, then a trailing '|'

Y5PA>18>><Esc>
Copy that line and paste it above five times. Cursor ends up in topmost line. Append '>18>>'

7|R'\<Down>\<Down><Left><Left>O>><Down><Left><Left>\<Down>\<Down><Left><Left><Left>/<Up>/<Down>/<Right><Right>.'<Up>.<Right><Up>.<Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right><Right><Up>.<Right><Right>.<Right><Right><Down>'<Right>.<Down><Right>'o
Go to 7th column, enter Replace-mode, and replace spaces with golfer and golf ball trail. Arrow keys are used to move around, since it uses fewer keypresses to use the arrow keys instead of <C-o>+movement for up to three keypresses.
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.