Arte ASCII de golfe


31

Vamos tentar jogar este pedaço de arte ascii representando um homem que joga golfe:

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

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

Regras:

  • Nenhuma entrada permitida
  • Nenhum recurso externo permitido
  • A saída deve ser exatamente esse texto, exibido em uma fonte monoespaçada (console do SO, console JS, tag <pre> HTML, ...), incluindo a quebra de linha inicial e final.
  • Citações entre aspas ou aspas duplas são permitidas (o console JS adiciona aspas duplas quando você produz uma string, tudo bem)

A melhor resposta será aquela que usar menos caracteres em qualquer idioma.

Diverta-se!


2
"exatamente este texto": incluindo a linha vazia no início? incluindo a linha vazia no final? com uma nova linha à direita ou sem? (Ou seja, 0, 1 ou 2 novas linhas. No final?) #
Martin Ender

@ m.buettner a saída deve ter exatamente uma quebra de linha inicial e uma quebra de linha à direita / nova linha. (e citações se você não pode evitá-los) :)
xem

1
Isso parece ASCII mais como um tiro Cricket para mim
Sr. Estrangeiro

@ Mr.Alien Eu vi isso na recente conversa de Martin Kleppe: speakerdeck.com/aemkei/… (vídeo: youtube.com/watch?v=zy-2ruMHdbU )
xem

Respostas:


14

CJam, 62 caracteres

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

Experimente online.

Execução de teste

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

Como funciona

2G#b converte a cadeia anterior em um número inteiro, considerando-a um número base-65536.

128b:cconverte esse número inteiro novamente em uma string ( 110 bytes ), considerando-o um número base 128, que ~então executa:

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

(notação de intercalação)

2/{)iS*}%

divide a string em pares de dois caracteres e faz o seguinte para cada par: Pop o segundo caractere da string, converta-o em um número inteiro e repita a string " "várias vezes.

Por exemplo, ".("torna-se ". ", porque o código de caractere ASCII (é 40.

Finalmente,

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

pressiona a corda "jgs", o caractere ^repetido 7 vezes, o caractere `, o caractere ^repetido 51 vezes e um avanço de linha.


1
Realmente incrível, mas quando eu pego a versão 62char do pastebin e "experimente on-line", uma quebra de linha está faltando antes da última linha "jgs ..."
xem

@ xem: Você copiou da seção RAW Paste Data ? Se eu copiar o código formatado, obtenho o mesmo resultado.
Dennis

15

Ruby, 107

Eu pensei em tentar "gerar" a imagem no código (em vez de usar alguma função de compactação existente):

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

Existem alguns caracteres não imprimíveis nesse literal de matriz.

Aqui está a visualização hexadecimal do arquivo, para mostrar também os caracteres não imprimíveis:

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

Agradecemos a Ventero por algumas melhorias importantes! (Ele basicamente reduziu o código em 50%.)


Bom esforço! Eu estava esperando por respostas como essa, que não apenas gzip o ASCII;)
xem

1
A segunda linha pode ser 6.times{|i|S[i+1]=' '*55+?|}para salvar 2 caracteres.
afuous

@voidpigeon Ah, obrigado. Na verdade, comecei com isso, mas inicialmente pensei que precisaria imais de uma vez. Boa pegada!
Martin Ender

2
Espero que você não se importe se eu mencionar mais algumas maneiras de encurtar isso! Em S.fill{' '*55+?|}vez disso, o uso salva mais alguns caracteres (você terá que definir Scomo ['']*7, alterar putspara puts p,S,pe subtrair 1 de todas as suas coordenadas y). Em seguida, usando varargs em f ( def f(*p,c)), você pode salvar as []chamadas de função. Ah, e você pode dar uma ()volta y,x.
Ventero 04/07/2014

1
Se você criar S uma dimensão, poderá salvar outros 55 caracteres;) Aqui está o código, se você não quiser fazer isso sozinho.
Ventero

13

bash + iconv + código da máquina DosBox / x86 (104 97 96 95 caracteres)

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

Sugiro colocar isso em um script em um diretório vazio, é quase garantido que copiar e colar em um terminal quebrará tudo; melhor ainda, você pode pegar o script aqui já pronto.

Saída esperada: resultado esperado

Como funciona

A parte do bash é apenas um iniciador que usa iconvpara "descomprimir" um .comarquivo dos caracteres UTF-8 do script e o inicia com o DosBox.

Observe que isso apresenta alguma limitação no conteúdo, pois nem todas as seqüências de entrada podem ser interpretadas como UCS-2 iconvsem reclamar; por exemplo, por algum motivo, muitas operações envolvendo o bxregistro causaram estragos, dependendo do local onde eu as usei, então tive que solucionar esse problema várias vezes.

Agora, a coisa Unicode é apenas tirar proveito das regras de "contagem de caracteres"; o tamanho real (em bytes) do script é muito maior que o .COMarquivo original .

O .comarquivo extraído é

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

e tem 108 bytes. A fonte NASM para isso é:

    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

Tudo isso é apenas um descompactador para compressed.datcujo formato é o seguinte:

  • se o bit alto não estiver definido, imprima o caractere como está;
  • caso contrário, os 6 bits baixos são a contagem de repetições e o segundo bit mais alto especifica se é necessário imprimir um espaço (bit não definido) ou um sinal de intercalação (conjunto de bits).

compressed.datpor sua vez, é gerado usando um script Python a partir do texto original.

A coisa toda pode ser encontrada aqui .


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

Isso usa formatação de string com preenchimento de espaço para uma compactação básica.


7

PHP, 147

Isso é executado na linha de comando e gera diretamente no 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

Agradeço a Ventero e m.buettner pela ajuda na otimização do RegEx.


Você pode salvar um caractere coms/\d+(?!8?>)/%$&s/rg
Ventero

@Ventero obrigado pela sugestão.
Core1024

2
Você pode salvar outro usando um quantificador possessivo :/\d++(?!>)/
Martin Ender

@ m.buettner Eu não sabia disso. Aprendendo coisas novas todos os dias :)
core1024

4

GCC C - 203 bytes

Imaginei que me divertiria com este. Isso compila na minha versão do MinGW e gera o texto esperado.

Espaço em branco adicionado para maior clareza.

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

Nenhum dos sites de colagem de código on-line permite o uso de caracteres de byte único fora do intervalo ASCII, então tive que escapar deles para obter um exemplo carregado. Caso contrário, é idêntico. http://codepad.org/nQrxTBlX

Você sempre pode verificá-lo com seu próprio compilador também.


4

LOLCODE, 590 caracteres

Porque LOLCODE é um idioma perfeito 4 golfe: é fácil 2 comprime um ofuscamento e não é detalhado.

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

Tenho certeza de que não, mas eu tenho um LOLCODE interpretado e um http://repl.it parece 2 não como funções.

(Tranzlashun é generosamente providenciado pelos robôs de http://speaklolcat.com porque eu não sei lolcat)


Versão recuada, espaçada e comentada do código (os comentários LOLCODE começam com 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, boa compressão, gosto: 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

A string iintercala os caracteres na arte ascii com seus multiplicitos, representados como caracteres, todos em ordem inversa. Além disso, economizo um pouco de espaço usando '!' em vez de 'G' ie depois apenas substituí-lo.


3

Python (145)

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

Não é muito original, eu sei.


2

Javascript ( ES6 ) 193 175 bytes

Edit: RegPack v3 modificado para manter novas linhas, use um for inloop para salvar 3 bytes e eval removido para saída implícita do 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 a compactação unicode do xem: 133 caracteres

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

ótimo! <3 o pós-processamento do RegPack! psst, você pode fazê-lo no 143b: xem.github.io/obfuscatweet
xem

@xem 143 caracteres, mas muito mais bytes
nderscore 4/04

sim desculpe, 143 caracteres. a pergunta diz que você pode contar caracteres. de qualquer maneira, a abordagem da RegPack é mais interessante do que o unicode-ofuscamento;)
xem

2
FWIW, mothereff.in/byte-counter é uma ferramenta que conta caracteres e bytes (conforme UTF-8).
Mathias Bynens

2

ES6, 155 caracteres

Apenas tentando outra abordagem:

Execute isso no console JS do Firefox.

Cada caractere unicode tem o seguinte formato: \ uD8 [código ASCII] \ uDC [número de repetições].

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

(String Unicode criada com: http://jsfiddle.net/LeaS9/ )


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

ó ótimo, obrigado!
Xem

2

PHP

Método 1, mais simples (139 bytes):

Usando uma string pré-esvaziada.

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

Método 2, codificando execuções de espaços em letras do alfabeto (192 bytes):

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

A parte acima contém alguns caracteres não. Despejo hexagonal:

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

O esquema de codificação é RLE com o comprimento codificado acima dos 7 bits inferiores, que são o caractere a ser exibido.


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

Execute isso no 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)

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

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

Graças a @nderscore!


1
ES6 até 158: (desce para 124 caracteres com compressão 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, ótimo, eu não sabia repetir
xem

@nderscore não se arrepender é ótimo :) mas a última linha parece quebrado no meu console 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 adiciona caracteres de quebra de linha invisível após 41 | \)
nderscore

Obrigado, atualizei a resposta e funciona. :) Também adicionei outra resposta 158b, talvez você tenha uma idéia para melhorá-la!
Xem

1

ES6, 163b / 127 caracteres

Outra abordagem, graças ao @nderscore.

Execute-o no console do 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))

Embalado (127c):

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

Tenho certeza @nderscore vai encontrar um aprimoramento :)
xem

Eu acho que o SE está quebrando alguns dos personagens desta solução. Usando uma abordagem semelhante para o que eu fiz com a outra resposta, esta desce para 163: jsfiddle.net/2Fbxq/3
nderscore

Bem, isso é uma grande melhoria (e um violino muito bom). Eu updade a resposta.
Xem

1

Python, 70 caracteres UTF-16

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

Claro que você provavelmente terá que usar a versão hexadecimal:

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

ou a versão base64:

I2NvZGluZzpVVEYtMTZCRQoAcAByAGkAbgB0ACd4nONSAAP1GAVMoAdG2EGNnaGFnR0XjIumHaFNHasRNTCN/nZ2WDTBNefj1Ai3EacLcWnUjyFBG5JGfSBU0FMnVh9IY1Z6cRwEJMSRDgCgLkcFACcALgBkAGUAYwBvAGQAZQAoACd6bGliACcAKQA=

A primeira "linha" do programa declara a codificação UTF-16. O arquivo inteiro é UTF16, mas o interpretador Python sempre interpreta a linha de codificação em ASCII (é #coding:UTF-16BE). Após a nova linha, o texto UTF-16 começa. Simplesmente é o local print'<data>'.decode('zlib')onde o texto é uma versão vazia da imagem ASCII de destino. Alguns cuidados foram tomados para garantir que o fluxo não tivesse substitutos (o que arruinaria a decodificação).


1
Bem, a primeira linha fez-me pensar "oh grande, alguém fez python unicode"
seequ

impressionante! Você pode fazer o mesmo em ~ 35b com UTF-32? :)
xem

zipem vez de zlibpode salvar um caractere.
Cees Timmerman

@xem: a maioria dos caracteres deixa de ser UTF-32 válido (os caracteres devem ser <= 0x10ffff).
Nneonneo 7/07

1
@ CeesTimmerman: na verdade, a escolha de zlibao invés de zipé muito proposital. zlibé um número par de caracteres.
Nneonneo 7/07

1

C # - 354 332

using System;
using System.IO;
using System.IO.Compression;
classe X
{
    static void Main (string [] args)
    {
        var x = Convert.FromBase64String ("41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiws");
        Console.WriteLine (novo StreamReader (novo DeflateStream (novo MemoryStream (x), CompressionMode.Decompress)). ReadToEnd ());
    }
}

Um pouco de golfe:

using System; utilizando System.IO; usando System.IO.Compression; class X {static void Main () {var x = Convert.FromBase64String ( "41IAA / UYBUygB0bYQY2doYWdHReMG4OhEwrUsRpRA9Pob2eHRRNccz5OjXAbcboQl0b9GBK0IWnUB0IFPXUFEjRmpRfHQUBCHOmAiwsA"); Console.WriteLine (new StreamReader (novo DeflateStream (new MemoryStream (x), (CompressionMode) 0)). ReadToEnd ());}}

Isso não é realmente bom se você ainda tiver nomes de variáveis ​​com mais de um caractere. Ou coisas desnecessárias como string[] args.
Joey

Não sei as regras, mas não há outra maneira em C #, e o código precisa ser compilado, portanto, este é o mais curto possível.
Erez Robinson

1
Mainnão precisa ter nenhum argumento, ele ainda será compilado (em contraste com Java). Remover isso e inlining já xtraz isso para 333. Você pode salvar outro byte removendo o espaço entre os argumentos no DeflateStreamctor. Você pode usar um molde para o membro enum: (CompressionMode)0, o que nos leva para baixo para 324. Então, eu diria que ainda não é o mais curto possível ;-)
Joey

Você está certo ..
Erez Robinson

1

bzip2, 116

Depois de ver a resposta do CJAM, achei que esse também deveria se qualificar.

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

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

$

Duvido que qualquer outra explicação seja necessária. :)


1
Usar Bubblegum com DEFLATE reduz para 77 bytes. Experimente online!
Miles

0

C (gcc) , 190 bytes

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

Experimente online!


0

Vim, 99 pressionamentos de teclas

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

provavelmente jogável

Explicação:

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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.