Desenhe esta xícara de café Ascii:
o o o __________ / \ __ | J \ | A | | V | | A | __ / \ __________ /
Brownie aponta para café-script ou java :)
O código mais curto em bytes, função ou programa, nova linha ou espaço em branco à direita é aceitável, beba!
Respostas:
SOGL , 48 bytes
Explicação:
SOGL possui compactação de strings integrada e uma das coisas que possui é uma compactação de dicionário de caracteres. Melhor ainda, ele possui um tipo de compactação de string de caixa em que os únicos caracteres disponíveis são "/ \ | _- \ n". Portanto, o programa inteiro é uma string envolta em "'(o" está implícito).
A string que eu dei ao compressor é (escapada):
fonte
JavaScript (ES6),
110104 bytesGuardado 4 bytes graças a edc65
Como funciona
A compactação da arte ASCII original é obtida substituindo todas as sequências de 2 a 10 espaços consecutivos e as duas sequências de 10 sublinhados consecutivos por um único dígito:
N
espaços consecutivos é codificada com o dígitoN-1
.9
.Usamos,
N-1
em vezN
disso, para nunca precisarmos usar mais de um dígito. Daí a necessidade de++n
decodificação.A expressão
n>>3
(shift bit a bit para a direita) é igual a 0 paran = 1
an = 7
e igual a 1 para on = 8
(não utilizado) en = 9
. Portanto,' _'[n>>3]
fornece um sublinhado para9
e um espaço para todos os outros valores encontrados.O único caso especial é a sequência de 10 espaços consecutivos logo acima de "JAVA". Codificá-lo com a
9
entraria em conflito com as seqüências de sublinhado. Então, precisamos dividi-lo em duas seqüências de 5 espaços, codificados como44
.fonte
f=
). Você pode salvar 4 bytes desta forma:n>>3
em vez de+!(n&7)
,9
em vez de_8
(duas vezes) e44
, em vez de9
f=
naquele ... Obrigado pelos bytes salvos!' '
). Mas não sei exatamente como isso acontece. O que a mudança de bits faz? Por que estamos incrementando n?Geléia ,
6764 bytes-2 bytes graças a Dennis (1. remova redundantes
”
e 2. substitua a decodificação transpose e run-lengthZŒṙ
, com redução pela repetição do elementox/
,.)Experimente online!
Quão?
“...“...’
é uma lista de dois números compactados de base 250:D
converte em decimal para gerar duas listas de dígitos:x/
reduz por repetição de elemento para fornecer uma lista de dígitos (repetindo o número da primeira lista pelo valor correspondente da outra):ị
instrui a indexar na lista da direita, uma baseada e modularmente (0 indexa no item mais à direita). A lista à direita¶_/\|JAVo
,, é simplesmente o caractere usado na ordem exigida em que o pilcrow¶
, é o mesmo ponto de código que um avanço de linha. O parceiro de fechamento de“
não é necessário, pois este é o final do programa:Jelly realiza uma impressão implícita desta lista, que, por conter caracteres, é impressa como se fosse uma string:
fonte
”
está implícita e você pode substituirZŒṙ
porx/
. Além disso, embora ele não possua bytes, o uso¶
de uma nova linha literal torna o código mais redimível.CoffeeScript ES6,
214180 bytesCoffeeScript, 135 bytes com codificação codificada
fonte
Python 2,
174172171167 bytesSem codificação.
Nenhuma codificação Base-64.
Sem Regex.
Economizou 2 bytes externalizando
'_'*10
e explorando a conversão de PythonTrue -> 1
eFalse -> 0
.Economizou 1 byte removendo espaços em branco desnecessários.
Guardado 4 bytes graças a @TuukkaX!
fonte
] for
ein [
.[2,7,4]
e[3,4,5,6]
para2,4,7
e3,4,5,6
.PowerShell ,
136124123105 bytesExperimente online!
Agradeço ao @briantist por encontrar o
-replace
método mais curto que eu sabia que estava em algum lugar.Isso pega a sequência com números no lugar do número necessário de espaços. Em seguida, regexamos
-replace
os dígitos com uma expressão de script$(" "*$1)
. Então, por exemplo, a primeira linha da string será$(" "*2)o
, a segunda será$(" "*7)o
e assim por diante. Por causa das aspas triplas, isso é deixado como uma string no pipeline. Despejamos isso emiex
(abreviadoInvoke-Expression
e semelhante aeval
), que processa as expressões de script e deixa a sequência de várias linhas resultante no pipeline. A saída está implícita.fonte
($_,' '*$_)[+$_-in48..57]
- não importa o que eu mude, parece falhar para mim.space
poro
e Barfs.GNU sed ,
113112 bytesCodificação básica, armazena 3 espaços como
S
,\n
como@
e 5 sublinha comoU
. Vou continuar tentando combinações para encontrar algo mais curto.Experimente online!
A solução trivial de imprimir diretamente a string é dada abaixo. Possui 136 bytes, resultando em uma compactação de 18%, usando o esquema de codificação acima.
Experimente online!
fonte
ss
comoS
salva 1 byte.S
armazenamento de 3 espaços, nãos
. Acho que vou editar este aqui, porque mantém o mesmo número de transformações.MATL,
8786838278 bytesEssa solução divide o café em dois pedaços: as "bolhas" e a caneca. Para criar as bolhas, criamos uma matriz esparsa com 111 localizada em três locais e a convertemos em uma matriz de caracteres
Para o componente caneca, contamos com a compressão de cordas
Ambos os componentes são impressos na saída e uma nova linha é automaticamente colocada entre os componentes
Experimente no MATL Online
fonte
Python 2 ,
128127 bytes-1 byte graças a Rod (use multiplicação de tupla
('_'*10,)
para evitar uma declaração).Experimente online!
Nota: essa barra invertida dupla é necessária antes do avanço da linha.
Tudo entre
'''
e'''
é uma única sequência, os dois%s
são formatadores que são substituídos pelo conteúdo da%(...)
tupla final , que por sua vez contém duas cópias'_'*10
via multiplicação da tupla(...)*2
. A'_'*10
multiplicação cadeia executa a produzir'__________'
.O código percorre os personagens,
c
, de toda essa string usandofor c in '''...
e cria uma nova seqüência juntando (join(...)
), quer o número de espaços identificados por
c
,int(c)
sec
é um dígitoou
c
si- sendo um dígito é identificado por
'0'<c<':'
economizar maisc.isdigit()
.fonte
u,u
com('_'*10,)*2
e soltar au
declaraçãoJava 8,
294289248 bytesGolfe:
No espírito da complexidade kolmogorov , isso não codifica a string a ser impressa. Em vez disso, utiliza o fato de que existem muitos casos de vários espaços seguidos por um caractere imprimível. Ele codifica o número de espaços que precedem um caractere no byte de alta ordem do caractere, com o caractere ASCII real no byte de baixa ordem.
Ungolfed:
fonte
\u0641
.F
. Deve ser possível encaixar os dois lá.0x
prefixo ajudou.if
é redundante, por exemplo) e raspar cerca de 1/6 do tamanho.Befunge,
158105101 bytesExperimente online!
Os caracteres na sequência são codificados primeiro como índices em uma tabela de pesquisa dos dez valores possíveis. Os índices são então agrupados em pares, cada par sendo combinado em um único número (i1 + i2 * 10) no intervalo de 0 a 99. Ao escolher cuidadosamente a ordem da tabela de pesquisa, podemos garantir que esses valores sempre serão válidos Caracteres ASCII que podem ser representados em uma string literal.
Esta é uma divisão do próprio código:
Começamos inicializando o último elemento da tabela de pesquisa com um caractere de nova linha (ASCII 10).
Em seguida, usamos uma string literal para enviar o conteúdo codificado para a pilha.
Finalmente, repetimos os valores da pilha, decodificando e emitindo dois caracteres por vez.
A última linha mantém a tabela de pesquisa: o nono elemento é um espaço implícito e o décimo (nova linha) é definido manualmente, conforme explicado anteriormente.
fonte
Retina , 71 bytes
Diferentemente da minha outra resposta , esta foi escrita à mão.
(há um espaço à direita no final)
Experimente online!
O princípio ainda está tendo uma corda "comprimida" a partir da qual a xícara de café pode ser reconstruída por substituições. Tentando diferentes substituições, descobriu-se que os únicos que vale a pena fazer são:
=
se transforma em__________
(10 sublinhados)fonte
Lisp comum,
125123122120114 bytesEu salvei 6 bytes, usando a idéia de apenas inserir enter na string em vez de
~&
s.Ideias de melhoria bem-vindas.
fonte
Python3, 206 bytes
fonte
s=' '
variável e usá-la.'o\n'
tem o mesmo comprimento que'o'+n
.print(*(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'),sep='\n')
oufor x in(' o',7*' '+'o',4*' '+'o',' '+10*'_','/'+10*' '+'\__','|'+3*' '+'J'+6*' '+'| \\','|'+4*' '+'A'+5*' '+'| |','|'+5*' '+'V'+4*' '+'| |','|'+6*' '+'A'+3*' '+'|__/','\\'+10*'_'+'/'):print(x)
, ambos são 197. Ainda mais do que um código rígido 136 .Pitão, 80 bytes
Intérprete online disponível aqui.
Decodificação simples de duração.
fonte
C - 179
Solução com amplo uso da string de formato:
Aqui está uma versão mais legível:
fonte
void g(){puts(" o\n o\n o\n __________\n/ \\__\n| J | \\\n| A | |\n| V | |\n| A |__/\n\__________/\n");}
Retina , 99 bytes
Esta solução foi gerada automaticamente usando este script.
(há espaços à direita em várias linhas)
Isso funciona usando os números 1,2,3,4 no lugar de algumas seqüências de caracteres que são repetidas na sequência de destino e as substituindo novamente.
Sei que poderia ser mais aprimorado ao ajustar esse código ou mudar completamente a abordagem, mas como o desafio de meta-golfe de kolmogorov teve um resultado decepcionante, eu queria tentar usar meu script em um desafio real.
Experimente online!
fonte
3
e depois mover a substituição até antes do 3. Além disso, você pode mudar2\n
para2\n3
e mover esta substituição para antes do 3. Experimente online!1\n__________
para1\n_____
e, em seguida, alterar cada um1
na substituição principal para11
Experimente online!Python 3.6
(não concorrente)Aqui está minha tentativa de codificação Huffman. Definitivamente, é ainda mais jogável se alguém quiser aceitar a idéia.
O literal pode ser compactado ainda mais convertendo-o para base64 ou outro, e a árvore Huffman pode ser otimizada para gerar um bititaray mais curto ainda.
fonte
Linguagem GameMaker, 138 bytes
fonte
C, 141 bytes
Uso
Solução fácil, 148 bytes:
fonte
PHP, 116 bytes
Isso se parece muito com a resposta de Arnauld - e faz praticamente o mesmo. Corra com
-r
.fonte
zsh, 86 bytes
Explicação: essa string é o java cup compactado com gzip ascii art. Eu uso
printf
, porque comecho
,zcat
imprime um aviso eecho -e
é um caractere mais longo. Não funciona combash
oush
, porque eles acham que é um arquivo binário. Como você não pode colar efetivamente essa saída do navegador, aqui está um arquivo utilizável.fonte
Java 9 / JShell, 299 bytes
Ungolfed:
Uso no JShell:
Codifica cada caractere como dez bits, consistindo em uma contagem do número de espaços antes do caractere nos três bits mais altos, seguidos pelo ponto de código nos sete bits mais baixos.
(Como existem apenas três bits para a contagem, ela não pode representar mais de sete espaços consecutivos e há dez espaços em um ponto da sequência. Eles são codificados como uma contagem de seis, seguida por um espaço e, em seguida, um contagem de três seguidos pelo próximo caractere.)
Infelizmente, ele perde para esta solução Java trivial de 140 bytes:
fonte
05AB1E , 85 bytes
Experimente online!
fonte