Golf ASCII-art


31

Proviamo a giocare a golf questo pezzo di arte ascii che rappresenta un uomo golfista:

      '\. . |> 18 >>
        \. '. |
       O >>. 'o |
        \. |
        / \. |
       / /. " |
 JGS ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^

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

Regole:

  • Nessun input consentito
  • Nessuna risorsa esterna consentita
  • L'output deve essere esattamente questo testo, visualizzato in un carattere monospace (console del sistema operativo, console JS, tag HTML <pre>, ...), inclusa l'interruzione di riga iniziale e finale.
  • Sono consentite virgolette circostanti o virgolette doppie (la console JS aggiunge virgolette doppie quando si genera una stringa, va bene)

La migliore risposta sarà quella che utilizza meno caratteri in qualsiasi lingua.

Divertiti!


2
"esattamente questo testo": compresa la riga vuota all'inizio? compresa la riga vuota alla fine? con una nuova riga finale o senza? (Cioè, 0, 1 o 2 new-.lines alla fine?)
Martin Ender

@ m.buettner l'output dovrebbe avere esattamente un'interruzione di riga iniziale e un'interruzione di riga finale / nuova riga. (e cita se non puoi evitarli) :)
xem

1
Che ASCII mi assomigli di più a un colpo di cricket
Mr. Alien,

@ Mr.Alien L'ho visto nel recente discorso di Martin Kleppe: speakerdeck.com/aemkei/… (video: youtube.com/watch?v=zy-2ruMHdbU )
xem

Risposte:


14

CJam, 62 caratteri

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

Provalo online.

Prova

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

Come funziona

2G#b converte la stringa precedente in un numero intero considerandolo un numero base-65536.

128b:cconverte quel numero intero in una stringa ( 110 byte ) considerandolo un numero base-128, che ~quindi esegue:

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

(notazione caret)

2/{)iS*}%

divide la stringa in coppie di due caratteri e procede come segue per ciascuna coppia: Pop il secondo carattere della stringa, convertilo in un numero intero e ripeti la stringa " "più volte.

Ad esempio, ".("diventa ". ", perché il codice carattere ASCII di (è 40.

Finalmente,

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

spinge la stringa "jgs", il carattere ^ripetuto 7 volte, il carattere `, il carattere ^ripetuto 51 volte e un avanzamento riga.


1
Davvero fantastico, ma quando prendo la versione 62char dal pastebin e "provo online", manca un'interruzione di riga prima dell'ultima riga "jgs ..."
xem

@xem: hai copiato dalla sezione RAW Paste Data ? Se copio il codice formattato, ottengo lo stesso risultato.
Dennis,

15

Ruby, 107

Ho pensato di provare a "generare" l'immagine nel codice (invece di utilizzare alcune funzioni di compressione esistenti):

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

Ci sono alcuni caratteri non stampabili in quell'array letterale.

Ecco la vista esadecimale del file, per mostrare anche i caratteri non stampabili:

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

Grazie a Ventero per alcuni importanti miglioramenti! (Ha sostanzialmente ridotto il codice del 50%.)


Bello sforzo! Speravo in risposte del genere, che non solo comprimessero l'ASCII;)
xem

1
La seconda riga potrebbe essere quella 6.times{|i|S[i+1]=' '*55+?|}di salvare 2 caratteri.
afuoso

@voidpigeon Ah grazie. In realtà ho iniziato con quello, ma inizialmente pensavo che avrei avuto bisogno di ipiù di una volta. Buona pesca!
Martin Ender,

2
Spero non ti dispiaccia se menziono qualche altro modo per accorciarlo! L'uso di S.fill{' '*55+?|}invece salva alcuni caratteri in più (dovrai definire Scome ['']*7, cambiare putsin puts p,S,pe sottrarre 1 da tutte le tue coordinate y). Quindi, usando varargs in f ( def f(*p,c)), è possibile salvare le []chiamate di funzione. Oh, e si può cadere il ()giro y,x.
Ventero,

1
Se crei S unidimensionale, puoi salvare altri 55 caratteri;) Ecco il codice se non vuoi farlo da solo.
Ventero,

13

bash + iconv + DosBox / x86 codice macchina (104 97 96 95 caratteri)

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

Suggerisco di metterlo in uno script in una directory vuota, è quasi garantito che incollarlo in un terminale spezzerà tutto; ancora meglio, puoi prendere lo script qui pronto.

Uscita prevista: uscita prevista

Come funziona

La parte bash è solo un launcher che usa iconvper "decomprimere" un .comfile dai caratteri UTF-8 dello script e lo lancia con DosBox.

Si noti che ciò pone alcune limitazioni sul contenuto, poiché non tutte le sequenze di input possono essere interpretate come UCS-2 iconvsenza lamentarsi; ad esempio, per qualche motivo molte operazioni che coinvolgono il bxregistro hanno provocato il caos a seconda del luogo in cui le ho usate, quindi ho dovuto risolvere questo problema diverse volte.

Ora, la cosa Unicode è solo quella di sfruttare le regole del "conteggio dei personaggi"; la dimensione effettiva (in byte) dello script è molto più grande del .COMfile originale .

Il .comfile estratto è

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

ed è lungo 108 byte. La fonte NASM per questo è:

    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

Tutto questo è solo un decompressore per il compressed.datcui formato è il seguente:

  • se il bit alto non è impostato, stampare il carattere così com'è;
  • in caso contrario, i 6 bit bassi rappresentano il conteggio delle ripetizioni e il secondo bit più alto specifica se deve stampare uno spazio (bit non impostato) o un cursore (set di bit).

compressed.data sua volta viene generato usando uno script Python dal testo originale.

Il tutto può essere trovato qui .


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

Questo utilizza la formattazione di stringa con spaziatura spaziale per una compressione di base.


7

PHP, 147

Viene eseguito dalla riga di comando e viene inviato direttamente alla console:

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

Grazie a Ventero e m.buettner per il loro aiuto nella mia ottimizzazione RegEx.


Puoi salvare un personaggio cons/\d+(?!8?>)/%$&s/rg
Ventero

@Ventero grazie per il suggerimento.
core1024,

2
Puoi salvarne un altro usando un quantificatore possessivo :/\d++(?!>)/
Martin Ender,

@ m.buettner Non lo sapevo. Imparare cose nuove ogni giorno :)
core1024

4

GCC C - 203 byte

Ho pensato che mi sarei divertito un po 'con questo. Questo si compila sulla mia versione di MinGW e genera il testo previsto.

Spazio bianco aggiunto per maggiore chiarezza.

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

Nessuno dei siti di incollaggio di codice online consente l'uso di caratteri a byte singolo al di fuori dell'intervallo ASCII, quindi ho dovuto scappare per un esempio caricato. Per il resto è identico. http://codepad.org/nQrxTBlX

Puoi sempre verificarlo anche con il tuo compilatore.


4

LOLCODE, 590 caratteri

Perché LOLCODE è un linguaggio perfetto per 4 golf: è facile 2 comprimere un offuscato e non è affatto prolisso.

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

Sono certo che non lo so, ma doan ha un LOLCODE per un interprete di http://repl.it sembra 2 non lievi funzioni.

(Tranzlashun generosamente fornito dai robot di http://speaklolcat.com perché io doan speek lolcat)


Versione indentata, spaziata e commentata del codice (i commenti LOLCODE iniziano con 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

ahah, bella compressione, piace: 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

La stringa iinterlaccia i caratteri nell'arte ascii con i loro moltipliciti, rappresentati come caratteri, tutti in ordine inverso. Inoltre, risparmio un po 'di spazio usando'! ' invece di "G" ie poi semplicemente sostituendolo.


3

Python (145)

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

Non molto originale, lo so.


2

Javascript ( ES6 ) 193 175 byte

Modifica: modificato RegPack v3 per mantenere le nuove righe, utilizzare un for inloop per salvare 3 byte e rimosso eval per l'output implicito della console.

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

Usando la compressione unicode di xem: 133 caratteri

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

grande! <3 la post-elaborazione del RegPack! psst, puoi farlo nel 143b
xem

@xem 143 caratteri, ma molti più byte
nderscore

si scusa, 143 caratteri. la domanda dice che puoi contare i caratteri. comunque, l'approccio del regpack è più interessante
dell'unicode

2
FWIW, mothereff.in/byte-counter è uno strumento che conta sia caratteri che byte (secondo UTF-8).
Mathias Bynens,

2

ES6, 155 caratteri

Sto solo provando un altro approccio:

Esegui questo nella console JS di Firefox.

Ogni carattere unicode ha la forma seguente: \ uD8 [codice a secco ascii] \ uDC [numero di ripetizioni].

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

(Stringa Unicode creata con: http://jsfiddle.net/LeaS9/ )


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

oh, fantastico, grazie!
XX

2

PHP

Metodo 1, più semplice (139 byte):

Utilizzando una stringa pre-sgonfiata.

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

Metodo 2, codifica delle esecuzioni di spazi in lettere alfabetiche (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)})

La parte sopra contiene alcuni non caratteri. Discarica esadecimale:

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

Lo schema di codifica è RLE con la lunghezza codificata sopra il 7 bit inferiore, che sono i caratteri da visualizzare.


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

Esegui questo nella console 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)

Confezione ES6: ( http://xem.github.io/obfuscatweet/ )

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

Grazie a @nderscore!


1
ES6 fino a 158: (scende a 124 caratteri con compressione 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, fantastico, non sapevo ripetere
xem

@nderscore non ti dispiace è fantastico :) ma l'ultima riga sembra interrotta nella mia console di Firefox
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 aggiunge caratteri di interruzione di riga invisibili dopo 41 | \ ‌)
nderscore

Grazie, ho aggiornato la risposta e funziona. :) Ho anche aggiunto un altro 158b anwser, forse avrai un'idea per migliorarlo!
XX

1

ES6, 163b / 127 caratteri

Ancora un altro approccio, grazie a @nderscore.

Eseguilo nella console di 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))

Imballato (127c):

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

Sono sicuro che @nderscore troverà un miglioramento :)
xem,

Penso che SE stia rompendo alcuni dei personaggi in questa soluzione. Usando un approccio simile a quello che ho fatto con l'altra tua risposta, si riduce a 163: jsfiddle.net/2Fbxq/3
nderscore

Bene, questo è un grande miglioramento (e un bel violino). Ho aggiornato la risposta.
XX

1

Python, 70 caratteri UTF-16

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

Ovviamente dovrai probabilmente usare la versione esadecimale:

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

o la versione base64:

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

La prima "riga" del programma dichiara la codifica UTF-16. L'intero file è UTF16, ma l'interprete Python interpreta sempre la linea di codifica in ASCII (lo è #coding:UTF-16BE). Dopo la nuova riga, inizia il testo UTF-16. Semplicemente equivale a print'<data>'.decode('zlib')dove il testo è una versione sgonfia dell'immagine ASCII target. È stata prestata particolare attenzione a garantire che il flusso non avesse surrogati (il che avrebbe rovinato la decodifica).


1
Bene, la prima riga mi ha fatto pensare "oh fantastico, qualcuno ha creato unicode pitone"
seequ

eccezionale! Puoi fare lo stesso in ~ 35b con UTF-32? :)
xem

zipinvece di zlibpuò salvare un carattere.
Cees Timmerman,

@xem: la maggior parte dei caratteri smette di essere valida UTF-32 (i caratteri devono essere <= 0x10ffff).
nneonneo,

1
@CeesTimmerman: in realtà la scelta di zlibpiuttosto che zipè molto propositiva. zlibè un numero pari di caratteri.
nneonneo,

1

C # - 354 332

utilizzando il sistema;
utilizzando System.IO;
utilizzando System.IO.Compression;
classe X
{
    void statico Main (string [] args)
    {
        var x = Convert.FromBase64String ("41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRHQQ
        Console.WriteLine (nuovo StreamReader (nuovo DeflateStream (nuovo MemoryStream (x), CompressionMode.Decompress)). ReadToEnd ());
    }
}

Un po 'golfato:

using System; using System.IO; utilizzando System.IO.Compression; class X {static void main () {var x = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"); Console.WriteLine (nuovo StreamReader (nuova DeflateStream (nuovo MemoryStream (x), (compressionMode) 0)) ReadToEnd ());.}}

Questo non è davvero un golf se hai ancora nomi di variabili più lunghi di un personaggio. O cose inutili come string[] args.
Joey,

Non so le regole, ma non c'è altro modo in C # e il codice deve essere compilato, quindi questo è il più breve possibile.
Erez Robinson,

1
Mainnon ha bisogno di alcun argomento, verrà comunque compilato (a differenza di Java). Rimuoverlo e allinearlo xporta già a 333. È possibile salvare un altro byte rimuovendo lo spazio tra gli argomenti nel DeflateStreamctor. Puoi usare un cast per il membro enum:, (CompressionMode)0che ci porta a 324. Quindi direi che non è ancora il più breve possibile ;-)
Joey

Giusto sei ..
Erez Robinson,

1

bzip2, 116

Dopo aver visto la risposta di CJAM, ho pensato che anche questo dovrebbe essere idoneo.

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

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

$

Dubito che siano necessarie ulteriori spiegazioni. :)


1
L'uso di Bubblegum con DEFLATE lo riduce a 77 byte. Provalo online!
Miglia,

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

Provalo online!


0

Vim, 99 battiture

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

probabilmente golfable

Spiegazione:

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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.