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!
Respostas:
CJam, 62 caracteres
Experimente online.
Execução de teste
Como funciona
2G#b
converte a cadeia anterior em um número inteiro, considerando-a um número base-65536.128b:c
converte esse número inteiro novamente em uma string ( 110 bytes ), considerando-o um número base 128, que~
então executa:(notação de intercalação)
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,
pressiona a corda
"jgs"
, o caractere^
repetido 7 vezes, o caractere`
, o caractere^
repetido 51 vezes e um avanço de linha.fonte
Ruby, 107
Eu pensei em tentar "gerar" a imagem no código (em vez de usar alguma função de compactação existente):
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:
Agradecemos a Ventero por algumas melhorias importantes! (Ele basicamente reduziu o código em 50%.)
fonte
6.times{|i|S[i+1]=' '*55+?|}
para salvar 2 caracteres.i
mais de uma vez. Boa pegada!S.fill{' '*55+?|}
vez disso, o uso salva mais alguns caracteres (você terá que definirS
como['']*7
, alterarputs
paraputs p,S,p
e 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()
voltay,x
.S
uma dimensão, poderá salvar outros 55 caracteres;) Aqui está o código, se você não quiser fazer isso sozinho.bash + iconv + código da máquina DosBox / x86 (
104979695 caracteres)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:
Como funciona
A parte do bash é apenas um iniciador que usa
iconv
para "descomprimir" um.com
arquivo 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
iconv
sem reclamar; por exemplo, por algum motivo, muitas operações envolvendo obx
registro 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
.COM
arquivo original .O
.com
arquivo extraído ée tem 108 bytes. A fonte NASM para isso é:
Tudo isso é apenas um descompactador para
compressed.dat
cujo formato é o seguinte:compressed.dat
por sua vez, é gerado usando um script Python a partir do texto original.A coisa toda pode ser encontrada aqui .
fonte
Python, 156
Isso usa formatação de string com preenchimento de espaço para uma compactação básica.
fonte
PHP, 147
Isso é executado na linha de comando e gera diretamente no console:
fonte
Perl - 127
129130132135137145Agradeço a Ventero e m.buettner pela ajuda na otimização do RegEx.
fonte
s/\d+(?!8?>)/%$&s/rg
/\d++(?!>)/
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.
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.
fonte
LOLCODE, 590 caracteres
Porque LOLCODE é um idioma perfeito 4 golfe: é fácil 2 comprime um ofuscamento e não é detalhado.
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):
fonte
Python -
205203197A string
i
intercala 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'i
e depois apenas substituí-lo.fonte
Python (145)
Não é muito original, eu sei.
fonte
Javascript ( ES6 )
193175 bytesEdit: RegPack v3 modificado para manter novas linhas, use um
for in
loop para salvar 3 bytes e eval removido para saída implícita do console.Usando a compactação unicode do xem: 133 caracteres
fonte
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].
(String Unicode criada com: http://jsfiddle.net/LeaS9/ )
fonte
.replace(/../g,a=>String.fromCharCode(a[c='charCodeAt']()&255).repeat(a[c](1)&255))
PHP
Método 1, mais simples (139 bytes):
Usando uma string pré-esvaziada.
Método 2, codificando execuções de espaços em letras do alfabeto (192 bytes):
fonte
PowerShell,
192188119A parte acima contém alguns caracteres não. Despejo hexagonal:
O esquema de codificação é RLE com o comprimento codificado acima dos 7 bits inferiores, que são o caractere a ser exibido.
fonte
Python - 236
fonte
JS (190b) / ES6 (146b) / ES6 compactado (118chars)
Execute isso no console JS:
JS:
ES6:
Pacote ES6: ( http://xem.github.io/obfuscatweet/ )
Graças a @nderscore!
fonte
"\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"
"\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 | \)ES6, 163b / 127 caracteres
Outra abordagem, graças ao @nderscore.
Execute-o no console do Firefox
JS (163b):
Embalado (127c):
fonte
Python, 70 caracteres UTF-16
Claro que você provavelmente terá que usar a versão hexadecimal:
ou a versão base64:
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 localprint'<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).fonte
zip
em vez dezlib
pode salvar um caractere.zlib
ao invés dezip
é muito proposital.zlib
é um número par de caracteres.C # -
354332Um pouco de golfe:
fonte
string[] args
.Main
não precisa ter nenhum argumento, ele ainda será compilado (em contraste com Java). Remover isso e inlining jáx
traz isso para 333. Você pode salvar outro byte removendo o espaço entre os argumentos noDeflateStream
ctor. 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 ;-)bzip2, 116
Depois de ver a resposta do CJAM, achei que esse também deveria se qualificar.
Duvido que qualquer outra explicação seja necessária. :)
fonte
C (gcc) , 190 bytes
Experimente online!
fonte
Vim, 99 pressionamentos de teclas
provavelmente jogável
Explicação:
fonte