Bermain golf ASCII-art


31

Mari kita coba bermain ascii-art yang mewakili seorang pemain golf:

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

Sumber: JGS - http://www.retrojunkie.com/asciiart/sports/golf.htm

Aturan:

  • Tidak ada input yang diizinkan
  • Tidak ada sumber daya eksternal yang diizinkan
  • Keluarannya harus persis teks ini, ditampilkan dalam font monospace (konsol OS, konsol JS, tag <pre> HTML, ...), termasuk pemecah baris terkemuka dan tertinggal.
  • Kutipan di sekeliling atau tanda kutip ganda diizinkan (konsol JS menambahkan tanda kutip ganda saat Anda mengeluarkan string, tidak apa-apa)

Jawaban terbaik adalah yang menggunakan lebih sedikit karakter dalam bahasa apa pun.

Selamat bersenang-senang!


2
"tepatnya teks ini": termasuk baris kosong di awal? termasuk baris kosong di akhir? dengan baris baru atau tanpa trailing? (Yaitu, 0, 1 atau 2 baris baru di akhir?)
Martin Ender

@ m.buettner output harus tepat satu istirahat baris terkemuka dan satu istirahat baris tambahan / baris baru. (dan kutip jika Anda tidak dapat menghindarinya) :)
xem

1
ASCII itu lebih mirip tembakan Cricket untuk saya
Tn. Alien

@ Mr.Alien Saya melihatnya dalam ceramah terbaru Martin Kleppe: speakerdeck.com/aemkei/… (video: youtube.com/watch?v=zy-2ruMHdbU )
xem

Jawaban:


14

CJam, 62 karakter

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

Cobalah online.

Uji coba

$ 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^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$

Bagaimana itu bekerja

2G#b mengubah string sebelumnya menjadi integer dengan mempertimbangkannya sebagai nomor base-65536.

128b:cmengonversi integer itu kembali ke string ( 110 byte ) dengan mempertimbangkannya sebagai nomor basis-128, yang ~kemudian mengeksekusi:

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

(notasi caret)

2/{)iS*}%

memisahkan string menjadi pasangan dua karakter dan melakukan hal berikut untuk setiap pasangan: Pop karakter kedua dari string, mengubahnya menjadi integer dan ulangi string " "itu berkali-kali.

Misalnya, ".("menjadi ". ", karena kode karakter ASCII (adalah 40.

Akhirnya,

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

mendorong string "jgs", karakter ^diulang 7 kali, karakter `, karakter ^diulang 51 kali dan linefeed.


1
Benar-benar hebat, tetapi ketika saya mengambil versi 62char dari pastebin dan "coba online", satu baris hilang sebelum baris terakhir "jgs ..."
xem

@xem: Apakah Anda menyalin dari bagian Data Tempel RAW ? Jika saya menyalin kode yang diformat, saya mendapatkan hasil yang sama.
Dennis

15

Ruby, 107

Saya pikir saya benar-benar akan mencoba "menghasilkan" gambar dalam kode (alih-alih menggunakan beberapa fungsi kompresi yang ada):

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

Ada beberapa karakter yang tidak dapat dicetak dalam array literal itu.

Berikut ini adalah tampilan hex file, untuk menunjukkan karakter yang tidak dapat dicetak, juga:

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

Terima kasih kepada Ventero untuk beberapa peningkatan besar! (Dia pada dasarnya mengurangi kode sebesar 50%.)


Usaha yang bagus! Saya berharap jawaban seperti itu, yang tidak hanya gzip ASCII;)
xem

1
Baris kedua bisa 6.times{|i|S[i+1]=' '*55+?|}untuk menyimpan 2 karakter.
afuous

@ voidpigeon Ah terima kasih. Saya sebenarnya mulai dengan itu, tetapi awalnya berpikir saya akan membutuhkan ilebih dari satu kali. Tangkapan yang bagus!
Martin Ender

2
Semoga Anda tidak keberatan jika saya menyebutkan beberapa cara lagi untuk mempersingkat ini! S.fill{' '*55+?|}Sebaliknya, menggunakan menyimpan lebih banyak karakter (Anda harus mendefinisikan Ssebagai ['']*7, ubah putsto puts p,S,pdan kurangi 1 dari semua koordinat y Anda). Kemudian, dengan menggunakan varargs di f ( def f(*p,c)), Anda dapat menyimpan []dalam panggilan fungsi. Oh, dan Anda bisa drop ()sekitar y,x.
Ventero

1
Jika Anda membuat S satu dimensi, Anda dapat menyimpan 55 karakter lainnya;) Ini kode jika Anda tidak ingin melakukannya sendiri.
Ventero

13

bash + iconv + kode mesin DosBox / x86 (104 97 96 95 karakter)

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

Saya menyarankan untuk menempatkan ini dalam skrip di direktori kosong, hampir dijamin bahwa menyalin-paste di terminal akan merusak segalanya; lebih baik lagi, Anda dapat mengambil skrip di sini yang sudah jadi.

Output yang diharapkan: output yang diharapkan

Bagaimana itu bekerja

Bagian bash hanyalah peluncur yang digunakan iconvuntuk "mendekompresi" .comfile dari karakter skrip UTF-8 dan meluncurkannya dengan DosBox.

Perhatikan bahwa ini menimbulkan batasan pada konten, karena tidak semua urutan input dapat diartikan sebagai UCS-2 dengan iconvtidak mengeluh; misalnya, untuk beberapa alasan banyak operasi yang melibatkan bxregister rusak total tergantung pada tempat saya menggunakannya, jadi saya harus mengatasi masalah ini beberapa kali.

Sekarang, hal Unicode hanya untuk mengambil keuntungan dari aturan "jumlah karakter"; ukuran sebenarnya (dalam byte) dari skrip jauh lebih besar dari .COMfile aslinya .

File yang diekstraksi .comadalah

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

dan panjangnya 108 byte. Sumber NASM untuk itu adalah:

    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

Semua ini hanyalah dekompreser compressed.datdengan format sebagai berikut:

  • jika bit tinggi tidak disetel, cetak karakter apa adanya;
  • jika tidak, bit 6 rendah adalah jumlah pengulangan, dan bit tertinggi kedua menentukan jika harus mencetak spasi (bit tidak disetel) atau tanda sisipan (bit set).

compressed.datpada gilirannya dihasilkan menggunakan skrip Python dari teks asli.

Semuanya bisa ditemukan di sini .


10

Python, 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

Ini menggunakan pemformatan string dengan bantalan ruang untuk beberapa kompresi dasar.


7

PHP, 147

Ini berjalan pada baris perintah dan output langsung ke konsol:

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

Terima kasih kepada Ventero dan m.buettner atas bantuan mereka dalam optimasi RegEx saya.


Anda dapat menyimpan satu karakter dengans/\d+(?!8?>)/%$&s/rg
Ventero

@Ventero terima kasih atas sarannya.
core1024

2
Anda dapat menyimpan yang lain dengan menggunakan kuantifier posesif :/\d++(?!>)/
Martin Ender

@ m.buettner saya tidak tahu itu. Mempelajari hal-hal baru setiap hari :)
core1024

4

GCC C - 203 byte

Saya pikir saya akan bersenang-senang dengan yang satu ini. Ini mengkompilasi versi MinGW saya dan menampilkan teks yang diharapkan.

Spasi ditambahkan untuk kejelasan.

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

Tidak ada situs yang menyisipkan kode online yang memungkinkan penggunaan karakter byte tunggal di luar rentang ASCII, jadi saya harus melarikan diri dari mereka untuk contoh yang diunggah. Namun sebaliknya identik. http://codepad.org/nQrxTBlX

Anda selalu dapat memverifikasinya dengan kompiler Anda sendiri juga.


4

LOLCODE, 590 karakter

Karena LOLCODE dari perfik bahasa 4 golf di: mudah 2 kompres yang membingungkan dan tidak bertele-tele sama sekali.

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

Pritee saya yakin dis werkz, tapi saya doan punya LOLCODE interpretr an http://repl.it tampaknya 2 tidak seperti funcshuns.

(Tranzlashun dengan murah hati disediakan oleh http://speaklolcat.com robot karena saya melakukan speek lolcat)


Versi indentasi, spasi, dan komentar kode (komentar LOLCODE dimulai dengan 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, kompresi yang bagus, seperti itu: D
Joshua

3

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

String iinterleave karakter dalam seni ascii dengan multiplicite mereka, diwakili sebagai karakter, semuanya dalam urutan terbalik. Selain itu, saya menghemat sedikit ruang dengan menggunakan '!' bukannya 'G' di ikemudian ganti saja.


3

Python (145)

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

Tidak terlalu orisinal, saya tahu.


2

Javascript ( ES6 ) 193 175 byte

Sunting: Modifikasi RegPack v3 untuk mempertahankan baris baru, menggunakan for inloop untuk menyimpan 3 byte, dan menghapus eval untuk output konsol implisit.

_="\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())

Menggunakan kompresi unicode xem: 133 karakter

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

besar! <3 paska pemrosesan RegPack! psst, Anda bisa membuatnya di 143b: xem.github.io/obfuscatweet
xem

@xem 143 karakter, tetapi lebih banyak byte
nderscore

ya maaf, 143 karakter. pertanyaannya mengatakan bahwa Anda dapat menghitung karakter. lagi pula, pendekatan regpack lebih menarik daripada unicode-obfuscation;)
xem

2
FWIW, mothereff.in/byte-counter adalah alat yang menghitung karakter dan byte (sesuai UTF-8).
Mathias Bynens

2

ES6, 155 karakter

Hanya mencoba pendekatan lain:

Jalankan ini di konsol JS Firefox.

Setiap karakter unicode memiliki bentuk sebagai berikut: \ uD8 [kode karakter ascii] \ uDC [jumlah pengulangan].

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

(String Unicode dibuat dengan: http://jsfiddle.net/LeaS9/ )


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

oh bagus, terima kasih!
xem

2

PHP

Metode 1, lebih sederhana (139 byte):

Menggunakan string pra-kempes.

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

Metode 2, menyandikan lintasan spasi menjadi huruf alfabet (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)})

Bagian di atas berisi beberapa non-karakter. Hex dump:

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

Skema penyandian adalah RLE dengan panjang yang disandikan di atas 7 bit yang lebih rendah, yang merupakan karakter untuk ditampilkan.


1

Python - 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 dikemas (118chars)

Jalankan ini di konsol 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 dikemas: ( http://xem.github.io/obfuscatweet/ )

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

Terima kasih kepada @nderscore!


1
ES6 turun ke 158: (turun ke 124 karakter dengan kompresi 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

oh, bagus, saya tidak tahu ulangi
xem

@nderscore jangan menyesal itu bagus :) tapi baris terakhir sepertinya rusak di konsol Firefox saya
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 menambahkan karakter pemecah garis yang tak terlihat setelah 41 | \ ‌)
nderscore

Terima kasih, saya memperbarui jawabannya dan berfungsi. :) Saya juga menambahkan 158b anwser lain, mungkin Anda akan punya ide untuk memperbaikinya!
xem

1

ES6, 163b / 127 karakter

Namun pendekatan lain, terima kasih kepada @nderscore.

Jalankan di konsol 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))

Dikemas (127c):

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

Saya yakin @nderscore akan menemukan peningkatan :)
xem

Saya pikir SE melanggar beberapa karakter dalam solusi ini. Menggunakan pendekatan yang mirip dengan apa yang saya lakukan dengan jawaban Anda yang lain, ini turun ke 163: jsfiddle.net/2Fbxq/3
nderscore

Ya, itu peningkatan luar biasa (dan biola yang sangat bagus). Saya memperbarui jawabannya.
xem

1

Python, 70 karakter UTF-16

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

Tentu saja Anda mungkin harus menggunakan versi 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

atau versi base64:

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

"Baris" pertama dari program ini menyatakan pengkodean UTF-16. Seluruh file adalah UTF16, tetapi interpreter Python selalu menginterpretasikan garis pengkodean dalam ASCII (itu adalah #coding:UTF-16BE). Setelah baris baru, teks UTF-16 dimulai. Ini hanya berarti di print'<data>'.decode('zlib')mana teks adalah versi kempes dari gambar ASCII target. Beberapa perhatian diambil untuk memastikan bahwa sungai tidak memiliki pengganti (yang akan merusak decoding).


1
Nah, baris pertama membuat saya berpikir "oh hebat, seseorang membuat unicode python"
seequ

luar biasa! Bisakah Anda melakukan hal yang sama dalam ~ 35b dengan UTF-32? :)
xem

zipbukannya zlibdapat menyimpan satu char.
Cees Timmerman

@xem: sebagian besar karakter berhenti menjadi UTF-32 yang valid (karakter harus <= 0x10ffff).
nneonneo

1
@CeesTimmerman: sebenarnya pilihan zlibdaripada zipsangat disengaja. zlibadalah angka genap.
nneonneo

1

C # - 354 332

menggunakan Sistem;
menggunakan System.IO;
menggunakan System.IO.Compression;
kelas X
{
    static void Main (string [] args)
    {
        var x = Convert.FromBase64String ("41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUQRHHRHJHRArArArArArArArArAA
        Console.WriteLine (StreamReader baru (DeflateStream baru (MemoryStream baru (x), CompressionMode.Decompress)). ReadToEnd ());
    }
}

Sedikit bermain golf:

menggunakan System; menggunakan System.IO; menggunakan System.IO.Compression; kelas X {static void Main () {var x = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"); Console.WriteLine (StreamReader baru (DeflateStream baru (MemoryStream baru (x), (CompressionMode) 0)). ReadToEnd ());}}

Itu tidak benar-benar golf jika Anda masih memiliki nama variabel lebih lama dari karakter di sana. Atau hal-hal yang tidak perlu seperti string[] args.
Joey

Tidak tahu aturannya, tetapi tidak ada cara lain dalam C #, dan kode harus dikompilasi jadi, ini adalah yang sesingkat mungkin.
Erez Robinson

1
Maintidak perlu memiliki argumen, itu masih akan dikompilasi (berbeda dengan Java). Menghapus itu dan inlining xmembawa ini ke 333 sudah. Anda dapat menyimpan byte lain dengan menghapus spasi di antara argumen di DeflateStreamctor. Anda dapat menggunakan pemeran untuk anggota enum:, (CompressionMode)0yang membawa kita ke 324. Jadi saya berpendapat itu belum sesingkat mungkin ;-)
Joey

Benar kamu ..
Erez Robinson

1

bzip2, 116

Setelah melihat jawaban CJAM, saya pikir ini harus memenuhi syarat juga.

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

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

$

Saya ragu penjelasan lebih lanjut diperlukan. :)


1
Menggunakan Bubblegum dengan DEFLATE membuatnya menjadi 77 byte. Cobalah online!
Mil

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

Cobalah online!


0

Vim, 99 penekanan tombol

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

mungkin golf

Penjelasan:

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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.