Desafio simples: tente gerar o seguinte texto no menor número de bytes possível:
the answer
toli fetheuniv
ersea nde ver
ything the ans
wer tol ife the
uni ver sean
dev ery thin
gth ean swer
tolifetheuni ver
seandeveryth ing
the ans wer
tol ifetheuniver
sea ndeverything
O desenho original contém 332 caracteres.
Regras
- Nenhuma entrada ou entrada não utilizada.
- A saída pode estar em qualquer formato razoável (string, lista de strings, matriz de caracteres e assim por diante).
- Você pode usar maiúsculas em vez de minúsculas para o desenho, se preferir.
- Espaços em branco e novas linhas permitidos.
- Isso é código-golfe , portanto, pode ganhar o programa / função mais curto para cada idioma!
Notas
- Isso foi identificado como uma possível duplicata de que não somos estranhos ao código do golfe, você conhece as regras e eu também . Essa pergunta era sobre pesquisar e substituir texto. Aqui você deve desenhar uma forma usando um determinado texto, e pelo menos duas das respostas atuais demonstram que as linguagens de golfe podem vencer algoritmos simples de compactação nesse caso.
code-golf
ascii-art
kolmogorov-complexity
Charlie
fonte
fonte
42
com*
e os substituí pelo texto, que se encaixava perfeitamente. Não precisei modificar o desenho original para ajustar a frase. Coincidência?Respostas:
Python 3 ,
224 220 219 215 211194 bytes15 bytes: emif(j%27<1)*j
vez deif j*(j%27<1)
e declaração de impressão simplificada.7*'0'
Experimente online!
Explicação:
Usa a compressão base-36 para compactar esse número binário (nova linha excluída)
Basicamente, temos dois contadores
i
ej
. Ao encontrar um1
, imprimimos um espaço; Caso contrário, se0
imprimirmos a próxima letra da string e aumentaremosi
.j
aumenta para cada um0 or 1
. Também imprimimos novas linhas sempre que necessário, ou seja, quandoj%27<1
se torna realidade.fonte
if j*(j%27<1):
paraif(j%27<1)*j:
Python 2 ,
235218213 bytesExperimente online!
Comutado para uma base 36 codificada int das posições das letras, como sugerido na pergunta.
Substitui cada personagem, um de cada vez.
Edit: Parece officialaimm usado base 36 antes de mim.
fonte
Chiclete , 125 bytes
Experimente online!
fonte
05AB1E ,
837974 bytes-4 bytes graças a Erik the Outgolfer
Produz uma lista de cadeias para salvar um byte.
Experimente online!
Explicação
2ÖH₆Ôn₅Ò\ÊÑĆ¸Ý¾*£„ÔûC∞qΘœ™‚¹µ—₃₄fm
é a representação 255 base do número decimal:Que codifica execuções de
1
s e0
s, respectivamente, índices mesmo sendo se e índices1
irregulares são0
s. Isso avalia o número binário:Código
fonte
"ÔAo îιË3š1ĆRÕ₃FWš{ÓÛÏ.!XµM§&¶ñD°3PŸ{óNι2Ðbмh"253ö
com•—."Ôq‚Ā0Ál0j¿«ªžé¨0õ₄7“Ÿ!½ÏiæÆø-δq–Å05q½Yñá+•
a -4.•
são para :)Python 2 ,
220 213212 bytes-1 byte por comutação
()*4
para%39
a partir @officialaimmExperimente online!
Essa é uma abordagem diferente das outras respostas do Python. Uso uma codificação
hexadecimalbase-36 (economizada em 7 bytes) de uma codificação RLE no estiloPNGda imagem (uma sequência de dígitos indicando o número de pixels repetidos consecutivos).A sequência de dígitos é :
Então, eu percorro esses dígitos e alternadamente imprimo esse número de '' ou caracteres da paleta ('theanswer ...'). Quando mais de 9 caracteres são repetidos, eu simplesmente adiciono 0 e depois o restante.
fonte
"theanswertolifetheuniverseandeverything"[w%39]
TIO #SOGL V0.12 , 74 bytes
Experimente aqui!
fonte
Permita-me responder minha própria pergunta ...
Carvão ,
140 126112 bytesExperimente online!
Você tem aqui um link para a versão detalhada mais próxima.
Explicação (consulte a versão detalhada para obter detalhes):
)%*(+&(+)''%'%'('%'%&%#%'%'%%%$%-&%%%%+&&%&%)&(.&%*.%%2%'%(%)%'.)%'.
sequência (68 bytes, 48 bytes compactados) é uma representação da codificação RLE do desenho. Todo código de caracteres menos 34 é o número de espaços (posições pares) ou o número de caracteres de texto (posições ímpares) a serem impressos consecutivamente.gtheanswertolifetheuniverseandeverythin
string (39 bytes, 27 bytes compactados) toda vez que um caractere que não é de espaço em branco é necessário para ser gravado. À medida que verifico o comprimento de uma lista para obter o próximo caractere e essa lista começa com um elemento, o último caractere da string é escrito na primeira posição.Agradecimentos
fonte
Assign(Minus(1, c), c);
, pode usarif (c) { ... } else Print(" ");
.for (68)
e, emAtIndex("...", i)
seguida, poderá usáModulo(i, 2)
-lo e não precisarác
mais.if (Not(Modulo(Length(PushOperator(u, w)), 27)))
, também não precisaráa
.AtIndex
faz um automáticoModulo
para queModulo(b, 39)
possa ser justob
.u
é uma variável predefinida que é apenas uma matriz vazia (salva usandoA⟦⟧υ
). Toda vez que você pressiona algo, seu comprimento aumenta em 1. Isso é mais curto do que uma atribuição explícita a ser incrementada.JavaScript (ES6),
207205203 bytesRetorna uma matriz de seqüências de caracteres com alguns espaços à direita.
fonte
Retina , 183 bytes
Experimente online! Explicação: O primeiro estágio adiciona a codificação RLE do bitmap da célula e o texto, que o segundo estágio duplica no tamanho correto, enquanto o terceiro estágio decodifica a codificação RLE. O quarto estágio move o texto para as células.
fonte
Gelatina , 83 bytes
Experimente online!
Como funciona
fonte
Adicionar ++ , 1398 bytes
Experimente online!
Parece que a codificação é a maneira mais curta (pelo menos em Add ++)
fonte
Vim, 239 pressionamentos de tecla
Quebras de linha adicionadas para "legibilidade"
Explicação
A primeira linha é arrancada
life, the universe and everything
de uma página de ajuda, que é um byte menor do que simplesmente digitando-a. Em seguida, transforma isso em:A segunda linha divide a string em:
E então a linha final o indenta para fazer:
fonte
Geléia , 76 bytes
Experimente online!
fonte
Retina , 185 bytes
Experimente online!
fonte
JavaScript, 215 bytes
solução baseada em guest44851
fonte
Ruby , 216 bytes
Experimente online!
Explicação Semelhante às soluções Python, mas usei a codificação de comprimento de execução antes de converter para a base 36. Portanto, a sequência de dados tem apenas 54 caracteres em vez de 68.
Mas ainda acabou por mais tempo, espero que possa ser jogado ainda mais.
fonte
Um porto da minha resposta do carvão vegetal :
C # (.NET Core) , 229 bytes
Experimente online!
fonte
C (gcc) ,
220219217213210 bytes-1 byte graças ao ceilingcat
-3 bytes graças a Jerry Jeremiah
Experimente online!
fonte
JavaScript,
265237219 bytesPoucos bytes de desconto graças a @tsh.
JSFiddle
fonte
join
Pitão , 121 bytes
Isso continha muitos bytes que eu não conseguia aparecer no TIO, então aqui está um hexdump:
Experimente online!
Você pode adicionar uma chamada para
wc
ouxxd
no script bash para ver o comprimento dos bytes ou o hexdump que produzi acima.Curiosamente, este programa demonstra um bug menor (?) No Pyth. Quaisquer bytes de retorno de carro (0x0d) são lidos como bytes de nova linha (0x0a) quando estão em literais de string. Isso me força a adicionar 6 bytes:
X ... ]T]13
substituir os dez incorretos por treze.Caso contrário, a idéia por trás desse código era bastante simples: registre cada posição em que ocorre uma execução de espaço em branco. Em seguida, emparelhe cada um desses índices com o número de espaços nessa execução. Em seguida, reconstrua a sequência original repetindo a frase quatro vezes e inserindo nos locais corretos. Se o número de espaços registrados for zero, uma nova linha será inserida.
fonte
Java (OpenJDK 8) ,
258252251 bytesExperimente online!
É uma implementação bastante ingênua. Primeiro uma máscara, para os caracteres impressos, depois um rolo sobre o texto até concluir.
fonte
int[]{16515968,33489856,x=58950624,x+16,x-40,31458204,7865230,1966983,462847,233471,117670784,x=134185856,x}
.Javascript, desenho aproximado. 319 bytes
^ pelo que vale a pena, na verdade não muito, mas antes de excluir o código com falha.
fonte