O desafio é realmente extremamente simples. Escolha 5 letras distintas (você pode simplesmente escolher as 5 que permitem o código mais curto, se quiser) e enviá-las para o console. No entanto, a diferença é que eles devem ser da lista a seguir:
AAA BBBB CCCC DDDD EEEEE FFFFF GGG H H
A A B B C D D E F G H H
AAAAA BBBB C D D EEEE FFFF G GG HHHHH
A A B B C D D E F G G H H
A A BBBB CCCC DDDD EEEEE F GGG H H
IIIII J K K L M M N N OOO
I J K K L MM MM NN N O O
I J KKK L M M M N N N O O
I J J K K L M M N NN O O
IIIII JJJ K K LLLLL M M N N OOO
PPPP QQQ RRRR SSSS TTTTT U U V V W W
P P Q Q R R S T U U V V W W
PPPP Q Q RRRR SSS T U U V V W W
P Q QQ R R S T U U V V W W W
P QQQQ R R SSSS T UUU V W W
X X Y Y ZZZZZ
X X Y Y Z
X Y Z
X X Y Z
X X Y ZZZZZ
Regras adicionais:
- 5 da mesma letra não é permitida, não há opções de repetição.
- Cada letra deve usar a capital em si mesma como caractere ascii para desenhá-la.
- Cada saída de letra deve estar na "mesma linha" e ter 5 espaços entre cada letra.
- Você pode escolher as 5 letras que desejar, permitindo reutilizar algum código e diminuir a contagem de bytes. Descobrir quais letras permitirão que você faça isso com mais eficiência faz parte do desafio.
- Espaços à direita são aceitáveis.
- Uma única nova linha à direita é aceitável, mas não mais do que uma nova linha à direita.
- Isso é código-golfe, vitórias mais baixas na contagem de bytes.
Exemplos:
ABCDE
AAA BBBB CCCC DDDD EEEEE
A A B B C D D E
AAAAA BBBB C D D EEEE
A A B B C D D E
A A BBBB CCCC DDDD EEEEE
EFLIP
EEEEE FFFFF L IIIII PPPP
E F L I P P
EEEE FFFF L I PPPP
E F L I P
EEEEE F LLLLL IIIII P
LOUCO
CCCC RRRR AAA ZZZZZ Y Y
C R R A A Z Y Y
C RRRR AAAAA Z Y
C R R A A Z Y
CCCC R R A A ZZZZZ Y
Não tenha medo de enviar mais de uma resposta com letras diferentes ou estratégias diferentes a cada vez; isso pode ser realizado de várias maneiras diferentes.
code-golf
ascii-art
kolmogorov-complexity
Urna de polvo mágico
fonte
fonte
J
segundos.\n
, eu permitirei.Respostas:
Geléia , 41 bytes
LICTE
TryItOnline!
Idéia
Use uma decodificação de duração da execução com letras que tenham o meio mais semelhante possível, com apenas uma duração da execução de cada "valor de pixel" por linha por letra.
Coloque um começo simples como "L" para evitar diferentes valores de decodificação do comprimento da execução para as linhas.
Coloque uma letra diferente (não foi possível encontrar 5) das três linhas do meio no final, para que a menor diferença possa ser adicionada aritmeticamente.
Saída desejada; os comprimentos de execução; e estes convertidos da base 11:
Os três valores
399633415
,431646160
e1179122455
na base de250
como índices de página de código de geléia são em seguidaðƁ ƥ
,ȷɓSɠ
eJrŀṘ
que pode ser utilizada para encapsular a informação de comprimento de sequncia.O código
fonte
Carvão ,
5149 bytes (ECXKI)Saídas
Experimente online!
Usando caracteres que são verticalmente simétricos, desenha as metades superiores e depois reflete. A maioria deles usa Polygon (
G
) e PolygonHollow (GH
) para desenhar uma série de segmentos de linha conectados com um caractere específico.I
pode ser feito mais facilmente com o MultiPrint (P
), usandoT
como a direção.Nota: PolygonHollow apenas desenha os segmentos especificados, sem concluir o polígono ou preenchê-lo. O polígono será concluído e preenchido (não o que queremos) se o polígono puder ser concluído com uma linha simples em uma das oito direções cardinais ou intercardinais. Caso contrário, ele se comporta como o PolygonHollow, para economizar um byte.
A ordem dos caracteres foi escolhida para exigir apenas movimentos horizontais do ponto final de um para o início do próximo. Veja como o cursor prossegue:
fonte
GH
aos docs]PowerShell v2 +,
138128114112106105 bytes (LICTD)A idéia é maximizar os espaços entre as letras para que possamos obter compressões repetidas.
Empresta o truque da deduplicação da linha do meio da resposta de Florent . Economizou 6 bytes graças a Ben Owen usando a multiplicação de cadeias para as três linhas do meio e um byte adicional graças a Matt .
A saída é a seguinte em 227 bytes, para uma redução de 53,7% -
fonte
$("L11 I1 C11 T1 D D`n"*3)
em vez das médias 3 linhasJavaScript,
110109 bytes (CLOUD)Mostrar snippet de código
A saída é 227 bytes:
fonte
ES6 (Javascript),
194, 181 bytes (IGOLF / QUALQUER)Este é longo e não está realmente otimizado (pelo menos ainda não), mas pode ser modificado para imprimir qualquer mensagem em particular, alterando apenas os dados de bitmap.
EDIT: Substituído interior reduzir com mapa , use mudança pouco para preenchimento
Golfe
Demo
Teoria
Pegue uma carta:
convertê-lo em matriz binária (bitmap)
faça o mesmo com outras 4 letras, digitalize uma linha, retirando "top" 5 bits de cada
11111 01110 01110 10000 11111
converter para uma cadeia hexadecimal (deve usar base36 ou até ASCII imprimível aqui)
0x1f73a1f
aplique o mesmo algoritmo a outras 4 linhas, para obter o bitmap.
Renderize na ordem inversa.
fonte
[32979487,4736528,4834846,4769296,32979952]
é menor do que sua representação hexadecimal/(1|0)/g
por/\d/g
para salvar alguns bytes. Também\n
pode ser substituído por uma nova linha real.PHP,
1071041029486 bytesOk, estou confiante de que tenho a menor fonte possível com esse método agora. Eu escrevi um script para gerar e depois compactar todas as combinações possíveis de cinco letras. Existem duas soluções que correspondem aos menores compactados - LODIC e LDOIC. Eu vou com o primeiro porque é mais divertido dizer.
Fonte:
Resultado:
fonte
'
s: a string será tratada como uma constante com um valor próprio.05AB1E , 44 bytes
Essa foi engraçada.
Sinto que preciso voltar e tentar jogar um pouco mais quando tiver tempo.
Usa a codificação CP-1252 .
Inspirado pela resposta do carusocomputing .
ECOIH
Experimente online!
Explicação
‘ÓÑOIHH‘
empurra a corda"ECOOIHH"
.SðýJ3×S
junta a string por espaços, repete-a três vezes e a converte em uma lista.A lista resultante é
['E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H']
.•Td<UÕ‘áÓ?¢tWvkÔÚ•
empurra o número564631055513119191317171314619131717500
.S)ø
fecha a lista e o número juntos.ü×J
faz repetição de cordas em pares e as junta.O resultado é a sequência
EEEEE CCCC OOO IIIII H HE C O O I H HEEEE C O O I HHHHH
.3äû»
divide isso em 3 partes, adiciona a primeira e a segunda peça na ordem inversa e junta-se por novas linhas.fonte
•Td<UÕ‘áÓ?¢tWvkÔÚ•
Empurra o número564631055513119191317171314619131717500
", porque por que não é ...JavaScript (ES6), 96 bytes (DIOCL)
A idéia aqui é não apenas tornar as três linhas do meio idênticas, mas também tornar a primeira linha quase idêntica à anterior. Como existem apenas 4 letras que se encaixam perfeitamente nessa descrição
CDIO
,L
é a próxima melhor opção, pois requer apenas 4 caracteres adicionados no final da string.Como na resposta de Florent , este é um trecho que retorna o resultado. Adicione 3 bytes se precisar ser uma função.
Snippet de teste
Mostrar snippet de código
fonte
D
primeiro.C
passadoI
eO
tambémI
imediatamente após oC
, embora o interessante seja que isso melhore minha solução do Lote, pelo mesmo motivo.Bash + coreutils com figlet, 55440 soluções,
112106 bytes cadaResultado:
Ei, já temos um programa de arte ASCII! A fonte do banner quase faz o trabalho, exceto que gera 7x7 letras. Hmm, vamos remover as 3ª e 5ª colunas, e as 2ª e 5ª linhas, e ver o que ela oferece ...
Acontece que muitas letras serão exibidas da maneira necessária, a saber, BDEFHJLPTU Z.
Basta substituir os argumentos do primeiro comando set por qualquer combinação dessas letras para obter o resultado correto! Portanto, isso nos fornece 11 * 10 * 9 * 8 * 7 = 55440 soluções, cada uma delas com 106 bytes de comprimento.
fonte
05AB1E ,
102908969 bytes (EOIXC)Experimente online!
Saída (230 bytes):
Explicação:
A teoria era escolher letras simétricas verticalmente, depois codificar as 3 primeiras linhas e palindromizá-las. Basicamente, codifiquei como {#} de {Letter} em pares de 2 bytes. Tenho certeza de que há uma maneira melhor de fazer isso.
-20 bytes graças a Emigna, estarei no chat para fazer algumas perguntas em breve;).
fonte
•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚîòvÅr葾)jM•34B2ð:
. Entre no bate-papo 05AB1E se tiver dúvidas sobre codificação.45ô
pode ser3ä
.A
não é verticalmente simétrico, nem o éF
. Vai adivinhar que, uma vez que você comece a usarG
ou superior, estragará o que você está falando, certo? Além disso, com minha metodologia de compactação, eu queria evitar letras com mais de 1 ocorrência por linha. Se você quer jogar essa solução e me derrotar, eu gostaria do exemplo :).0
naO
(linha central, do lado direito)•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚúNÏŒº9¨gÚSÞ•
corrige aO
mesma contagem de bytes.JavaScript ES6, 168 bytes, CHAMP
Podemos parar de procurar gente, temos um
CHAMP
aquifonte
Brainf ***
512411 bytesMelhor refazer:
Este faz um trabalho melhor na otimização da fita, sacrificando os caracteres de configuração para imprimir caracteres. A fita neste parece
'C' 'E' ' ' 'F' 'I' 'L' '\n'
, melhorando a eficiência. Eu os escolhi porque eles não têm espaços internos, fazendo com que eles não precisem ir e voltar entre o caráter e o espaço mais do que o necessárioSe você quiser ler o que está fazendo:
Resultado:
Submissão anterior:
Eu escolhi ir com o ABCDE porque facilita a configuração da fita para saída, mas o tempo e os caracteres que eu desperdicei indo da letra para '' para todo o espaço negativo dentro de A, B e D e a colocação de a linha final no final da fita meio que me matou, eu acho.
Acabei com uma fita que tinha os valores
0 0 'A' 'B' 'C' 'D' 'E' ' ' \n
e depois saí de láResultado:
fonte
[<]>
em 3 ocasiões para salvar 6 bytes.Vim,
116 bytes99 bytesELITC
Jogou menos de 100 com a ajuda de @DrMcMoylex.
Como contém caracteres não imprimíveis, os adicionei abaixo (estilo Vim), para que você possa vê-los.
TryItOnline!
Basicamente, usa a mesma decodificação de execução que a resposta da geléia. Usei letras nas quais eu poderia (espero) repetir a parte superior na parte inferior, e os médios seriam todos iguais. Depois que as partes superior, inferior e intermediária são criadas, edito os caracteres para corrigi-los:
Eu tenho que adicionar dois espaços ao I, porque não permiti números de dois dígitos (para que eu não precisasse de um separador. Isso leva a uma execução de 9 espaços onde eu preciso de 11.
fonte
Y
vez deVy
, emFI
vez de?I<cr>
, em{
vez degg
, emw
vez defl
. 3) Se você usar emr
vez deR
, poderá remover o<esc>
.MATL , 49 bytes
Experimente online!
Isso produz as letras
TIHZN
:Explicação
T
é relativamente fácil de construir a partir do zero.I
pode ser obtido essencialmente comoT
mais sua reflexão vertical.H
éI
transposto.N
éZ
transposto e refletido verticalmente.fonte
V ,
62, 53 bytesExperimente online!
Isso gera
C I D O Z
:fonte
Perl, 109 bytes (ABCDE)
Nota : contém caracteres não imprimíveis, escapados para facilitar o teste aqui,
xxd
despejo abaixo.Armazena a representação binária das posições da letra como um número e depois descompacta novamente no binário, substituindo
0
s por espaços1
es pela letra correspondente, usando uma pesquisa. Armazenar as representações das letras é bastante fácil, mas substituí-las ficou mais complicado do que eu esperava. Tenho certeza de que existem maneiras melhores de fazer isso, para que eu possa continuar a brincar com isso.Para recriar o arquivo, execute
xxd -r > favourite-letter.pl
, cole o abaixo e pressione Ctrl+ D:Uso
fonte
Python 2, 124 bytes
Semelhante à minha outra resposta , mas com melhores opções de letras. Emite isso:
fonte
Anterior, 120 bytes (CKYTF)
Fonte
Resultado
Experimente online!
Caso isso importe, devo salientar que minha saída possui um espaço à esquerda em cada linha. As regras não proíbem explicitamente isso, então espero que esteja tudo bem. Caso contrário, considere esta entrada como não concorrente.
Explicação
As letras da palavra são codificadas como uma sequência simples de 25 números inteiros, cada número inteiro sendo uma representação binária de 5 pixels. Como o Befunge exige que você execute um cálculo para instanciar qualquer número inteiro maior que 9, as letras foram escolhidas para minimizar o número de cálculos necessários e ordenadas para que possíveis valores repetidos pudessem ser duplicados em vez de recalculados.
Também precisamos armazenar o valor ASCII de cada letra, deslocada por 32, em uma matriz que é indexada pelo módulo 5 de um índice decrescente (para que seja 0 4 3 2 1 ...). O motivo da compensação por 32 é que o valor pode ser multiplicado por um bit de pixel (1 ou 0) e depois adicionado a 32 para produzir um espaço ou o caractere necessário.
Essa matriz de valores de letras é armazenada nos primeiros 5 bytes do código, facilitando o acesso. Isso também influenciou a escolha das letras, pois esses valores precisavam ter significado quando interpretados como uma sequência de código. Esta é a sequência
#&49+
. Os#
saltos sobre a&
ea49+
apenas empurra 13 para a pilha que é posteriormente ignorado.fonte
&
, mas seu programa não recebe entrada ... o que está acontecendo?Ruby,
110107102 bytes (dócil)Impressões
EDIT: salvou alguns caracteres, evitando
join
e movendo as coisasfonte
Befunge-98 ,
10998 bytes (FUNGE / QUALQUER)Experimente online!
Entrada (115 caracteres):
Input é a versão inteira de um número binário com o formato em
aaaaabbbbbb
queaaaaa
é um mapa invertido do caractere a ser impresso (por exemplo, a segunda linha no N éNN N
, portanto a máscara é10011
) ebbbbbb
é o caractere ascii a ser impresso, menos 32 .Também criei um programa befunge-98 para criar minhas entradas:
Experimente online!
Saída (255 caracteres):
Explicação:
Provavelmente isso é bastante jogável; Passei quase algum tempo pensando em possíveis reduções.
Teoricamente, isso pode imprimir qualquer sequência da arte ASCII 5x5.
Agradeço a James Holderness por me ajudar a sair de três dígitos!
fonte
48*
pode ser substituído por'
(já que são 98, afinal) e88*
pode ser substituído por'@
. Obrigado por me ajudar a sair de três dígitos!C #,
290279267265 BytesEditar: salvou 12 bytes graças a @milk! E mais 2 graças a @TheLethalCoder
Golfe:
Ungolfed:
Saídas:
fonte
Func<string,string>j=a=>a.Replace("|",g)+"\r\n";
Stax , 33 bytes "BCDEO"
Execute e depure
Eu escolhi cartas que
Essas propriedades significam que cada letra pode ser representada por uma grade 3x3. Aqui estão as 9 regiões, representadas por dígitos.
Considere a letra "B". Ele pode ser representado por 3 dígitos octais:
656
. Cada dígito contém três bits, que controlam quais regiões estão ativadas para essa letra. Essa técnica também funciona para "CDEO".Descompactado, desmontado e comentado, o programa se parece com isso.
Execute este
fonte
Python 3,
234228227166 bytes (CLOUD):Impressões:
fonte
Python 3, 178 bytes
Não vai ganhar, mas não usa nenhuma compactação. Faz isto:
Qualquer ajuda é bem-vinda, provavelmente perdi alguma coisa. Eu não usei o Python 2 porque você não pode fazer isso
p=print
, e isso economiza 17 bytes. Experimente em repl.it.fonte
p=print
, você pode usar uma únicaprint
instrução com o argumento kwsep='\n'
.Ruby, 101 bytes (TIFLE)
Escolhi letras que exigiam um único bloco de letras (1,4 ou 5 letras) em cada linha. F, L e E são deixados justificados, mas T e eu exigem espaços à esquerda onde uma única letra (parte vertical) é impressa. O código para adicionar esses espaços parece que poderia ser melhorado.
destroçado
fonte
C 176 bytes
Se entradas implícitas são permitidas, é possível cortar outros 8 bytes.
Saída: EDCBA
Como funciona: A macro R apenas repete um pedaço de código 5 vezes. Dada a frequência com que cinco aparecem neste problema, é muito útil. Agora: aqui está o que T (int) faz. T pega um número inteiro e o usa como um campo de bits para determinar onde imprimir letras e onde imprimir espaço em branco. Por exemplo, se for dado
T(0b11111111100111111110011100)
, ele irá imprimir:EEEEE DDDD CCCC BBBB AAA
. Ele conta progressivamente a letra que imprime. Primeiro, imprime E, depois D, depois C, depois B e depois A. Chamar f () imprimirá a coisa toda.fonte
Lote, 135 bytes (DOCILe)
Nota: a primeira linha termina em 5 espaços.
fonte
BATER,
95, 111 bytes (EBASH)Golfe
Explicação
Base64 sobre fluxo de bytes brutos LZMA
Demo
aviso Legal
Sim, estou ciente de que isso não é realmente portátil, por isso paguei um byte para suprimir os avisos xz com -q no primeiro caso> :)
fonte
Python 2,
208194193 bytesEste é o meu primeiro código de golfe;) Divertido de fazer
Resultado:
O uso de um dicionário destrói a ordem de classificação das letras, mas isso não era um requisito
fonte
perl 94 bytes.
Os primeiros 4 letras (
D
,O
,I
,C
) são especificamente escolhidos para ter as linhas superior e inferior semelhantes, e os do meio semelhante. Como não há outra letra similar, escolhi o "L" para poder aplicar o mesmo algoritmo e adicionar o 4L ausente.Salvei alguns bytes extras substituindo
\n
o código por uma nova linha real.Resultado:
fonte