Isso é um pouco semelhante a essa entrada coberta de poeira, mas espero que minha rotação a torne única o suficiente. Não consegui encontrar nada que me dissuadisse de postar isso, mas há bastante mar lá fora.
De qualquer forma! O desafio:
Seu código recebe uma sequência de caracteres; Ele converte isso em uma versão em estilo ASCII-art da mesma string, mas com uma pegada.
Transformação de entrada
- Os únicos caracteres a serem suportados são AZ e 0-9
- Letras minúsculas são transformadas em maiúsculas
- Qualquer outra coisa é removida silenciosamente
Desenho de personagem
- Cada "pixel" da fonte ampliada é extraído da sequência de entrada
- O enésimo pixel é igual ao enésimo caractere na sequência de entrada. Se n for maior que o comprimento da sequência de entrada, retorne ao início
- Letras individuais são desenhadas da esquerda para a direita, de cima para baixo
- As letras subsequentes selecionam seu índice de "caracteres de pixel" de onde a última letra parou (por exemplo, com um comprimento de entrada de 10, se a primeira letra tiver 9 pixels, o primeiro pixel da segunda letra será desenhado com o 10º caractere de entrada, o segundo pixel será desenhado com o primeiro caractere de entrada)
- Cada letra é desenhada em uma grade 5x5, totalmente preenchida com espaços. Você pode encontrar a fonte que você deve usar pré-renderizada para você nesta pasta ou um pouco mais abaixo nesta postagem
- Cada letra é desenhada na mesma linha; portanto, o número total de quebras de linha em sua saída será 4
- Cada letra é separada por 2 colunas de espaços
A fonte
000
0 00
0 0 0
00 0
000
111
1
1
1
11111
2222
2
222
2
22222
3333
3
333
3
3333
44
4 4
44444
4
4
55555
5
5555
5
5555
6666
6
6666
6 6
666
77777
7
7
7
7
888
8 8
888
8 8
888
999
9 9
9999
9
9999
AAA
A A
AAAAA
A A
A A
BBBB
B B
BBBB
B B
BBBB
CCCC
C
C
C
CCCC
DDDD
D D
D D
D D
DDDD
EEEEE
E
EEE
E
EEEEE
FFFFF
F
FFF
F
F
GGGG
G
G GG
G G
GGGG
H H
H H
HHHHH
H H
H H
IIIII
I
I
I
IIIII
JJJJJ
J
J
J
JJ
K K
K K
KKK
K K
K K
L
L
L
L
LLLLL
M M
MM MM
M M M
M M
M M
N N
NN N
N N N
N NN
N N
OOO
O O
O O
O O
OOO
PPPP
P P
PPPP
P
P
QQ
Q Q
Q QQ
Q Q
QQ Q
RRRR
R R
RRRR
R R
R R
SSSS
S
SSS
S
SSSS
TTTTT
T
T
T
T
U U
U U
U U
U U
UUU
V V
V V
V V
V V
V
W W
W W
W W W
WW WW
W W
X X
X X
X
X X
X X
Y Y
Y Y
Y
Y
Y
ZZZZZ
Z
Z
Z
ZZZZZ
Sim, eu sei que o 4 e o Q são feios
Um exemplo
Entrada
0123456789
Resultado
012 567 6789 0123 34 45678 9012 34567 234 567
3 45 8 0 4 5 6 9 3 8 5 6 8 9
6 7 8 9 123 567 78901 0123 4567 9 789 0123
90 1 0 4 8 2 4 8 9 0 0 1 4
234 12345 56789 9012 3 5678 012 1 234 5678
Outro exemplo
Entrada
a3 B'2
Resultado
A3B B2A3 2A3B 2A3B
2 A B 2 A 2
3B2A3 2A3 3B2A A3B
B 2 B 3 B 2
A 3 2A3B 2A3B A3B2A
As brechas padrão são proibidas. Codifique o golfe para que nenhum sinal verde seja dado.
[A-Z\d]
- não acho que a filtragem de caracteres inválidos acrescente algo ao desafio.Respostas:
Python 2 ,
413411373364352345 bytes-1 byte graças a Kevin Cruijssen .
-9 bytes graças a Jo King .
-1 byte graças a Lynn .
A sequência de dados contém imprimíveis, versão escapada abaixo.
Experimente online!
Como cada caractere possui 25 pixels, ele pode ser facilmente codificado em 25 bits. O número base 126
'uM\x04<L\x10x\x14Se#ye\x0f>El4NpD@$\tgh>\x1d\x10\x15I,\x0em]a\x0e\x03B>e\x15,\x0c]\x03?kFL\x01\x0byglxV!\x18\x16\x0c\x0b\x10\x0b%w832wGj%uT{Hr*K,*[P\n6.&ED#T\x0c}^\x1c\x0fD\x17LI&p7\x17f\\d`*\x01l\x1bG\x12!Fac\x05\x08\x0eG\rz?!\x1aA'
codifica todos os caracteres, o0
codificado pelos 25 bits menos significativos, os1
25 bits seguintes e oZ
codificado pelos 25 bits mais significativos. Um único caractere é codificado na seguinte ordem:(
00
é o bit menos significativo,25
o mais significativo)Os espaços são codificados por um zero, não espaços por um. Exemplo :
Ungolfed
Experimente online!
fonte
+' '
deve ser+' '
. Boa resposta, independentemente, então +1 de mim..upper()
algum lugar que, caso contrário, as letras internas acabam minúsculas>1
.APL (Dyalog Unicode) ,
228225224214 bytesPrograma completo. Solicita stdin para seqüência de caracteres. Imprime em stdout. Cerca de metade do código está apenas decodificando o alfabeto codificado.
_
…_
Representa a seguinte sequência codificada em LZ4 de 143 bytes entre aspas:"⊥\u0004pæ€}€\\⊃⌿Æ€â<Å€∧€ÀÆ€Ð┬:Ëcü\u0000≥ðè⊤õ⍨¢∧·èý\u0005þÐÕ\u001EÐ :\u001Eè⌊×ßi[B⊂ɫoãà oéìÐ⍙⊃Ý∣à)≥èB⊃\u001B\u001F⊥ä{⌿⍨ G⍺\u001B⌿Æ\u001F∇x└îR`:└è→⊂\u0000ê∧⍒\u0003ɫqè$$ÛD⊥â∊\u001B\u001Eéu|\u001B@4A|⍪┌nàkááЀ€€€€€€"
Experimente online!
_
…_
Sequência codificada em LZ4 de 143 bytes entre aspas⎕AV⍳
ɩ ndices de que no um Tomic V ector (o conjunto de caracteres)¯125+
adicione -125 a isso (para obter números inteiros de 8 bits)¯1(219⌶)
Descomprimir LZ40(220⌶)
desserializar para uma matriz booleana de 36 camadas, 5 linhas e 5 colunas(
…)⌷
Indexe usando os seguintes índices:⎕A
Um alfabeto em maiúsculas⎕D,
Anexe os D igitsa←
armazenar ema
(para um alfabeto)(
…)∩
Interseção entre o seguinte e o que (remove entrada inválida):⍞
prompt para entrada de texto do stdin (console)1(819⌶)
dobre para maiúsculas (819
pareceBig
, 1 é para sim grande em vez de pequeno)i←
loja emi
(para i Nput)a⍳
d índices disso ema
⊂
coloque (para indexar com cada um representando a coordenada principal)t←
armazenar emt
(por t ext),
ravel (achatar)r←
armazenar emr
(por r avelled)+/
soma que (isto é, número de caracteres necessários para pintar a arte)i⍴⍨
ciclicamente r eshape a entrada para que o comprimentor\
expandir isso; insira espaços em 0s, consuma letras em 1s(
…) Res` remodelar para a seguinte forma:⍴t
a forma do texto↓
divida a matriz N-por-5-por-5 em uma matriz de linhas de arte N-por-5⍉
transpor para uma matriz de 5 por N de linhas de arte (alinha as linhas correspondentes dos caracteres)Por padrão, o APL separa elementos simples de uma matriz aninhada com 2 espaços.
fonte
Python 2 , 428 bytes
Experimente online!
As letras são codificadas da seguinte forma:
Cada peça única (existem 23) é convertida em binária e um 1 é adicionado à frente. Em seguida, é convertido na base 36.
Os números base-36 resultantes são:
A inicial
1
é removida, portanto, temos um único caractere:Cada letra (
A-Z0-9
) é então codificada para cinco desses novos caracteres.Em cinco listas:
Para mapear a entrada para um índice nessas listas, o ordinal é modificado:
Como os ordinais não são de 0 a 35, mas são levemente misturados, as 5 listas são reorganizadas e concatenadas:
Para cada caractere na entrada, são encontradas 5 letras e convertidas em ints (base36):
Se o número estiver abaixo
30
,36
é adicionado (a falta1
que removemos anteriormente)Em seguida, o número é convertido novamente em binário e
0
s e1
s são convertidos eme
.
. Dois espaços são adicionados no final durante a conversão.Por exemplo.
Para cada um
.
no resultado, ele é substituído pelo próximo caractere da entrada (iterado porx
)fonte
Java 8,
917907 bytesVai jogar daqui para baixo, pelo menos, pela metade, esperançosamente ..
Experimente online.
Explicação:
fonte
i=-1
interior do lambda. Mas talvez eu esteja incorreto e não seja permitido de acordo com a meta? EDIT: Algo semelhante é feito com bastante frequência nas respostas C.int i;f->{for(;i++<10;)print(i);}
é 1 byte menor quef->{for(int i=0;i++<10;)print(i);}
.i=-1
está dentro da função lambda. Seu exemplo não funciona se você executar o mesmo lambda duas vezes, o meu funciona, que é a principal diferença aqui.int i;f->{for(i=0;i++<10;)print(i);}
seria permitido, por exemplo (embora não seja muito menor).Japt v2.0a0
-R
,213211210209206193191190 bytesInclui um espaço à esquerda em cada linha.
Experimente ou teste todos os caracteres (os bytes extras devem-se ao TIO ainda não suportar o Japt v2)
Explicação
Tabela de pesquisa
Cada grupo de 4 caracteres na sequência (representado por
...
aqui para economizar espaço e porque contém um monte de não imprimíveis) é a representação binária de cada caractere (0
para espaços,1
para caracteres) com as novas linhas removidas e convertidas para a base-100.Exemplo
O código
fonte
Ruby , 366 bytes
Experimente online!
Isso pode ser muito praticado, mas agora estou sem tempo e idéias. Foi mais difícil do que eu pensava apenas para fazê-lo funcionar.
Como funciona:
Não é tão difícil de entender, vou explicar como o alfabeto é codificado com um exemplo. Cada linha de cada caractere é convertida em binário e depois em base-36.
A primeira etapa é remover todos os caracteres não alfanuméricos da sequência de entrada.
Em seguida, gero uma tabela de pesquisa para a renderização final, porque quero imprimir linha por linha.
Depois disso, iterando na linha do alfabeto, crio o padrão binário das letras.
Finalmente, substituo 0 por espaços e 1 por caracteres da tabela de pesquisa.
Sinta-se à vontade para jogar mais, sei que isso pode ser de 20 a 30 bytes mais curto (usando gsub em vez de tr e assim por diante), mas não estou interessado agora, a menos que consiga tornar a tabela do alfabeto drasticamente menor.
fonte
Carvão ,
172164 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Prefixe os dígitos ao alfabeto maiúsculo predefinido.
Coloque em maiúscula a entrada e filtre todos os caracteres não suportados.
Passe pelos caracteres restantes.
Faça um loop sobre cada linha, imprimindo implicitamente cada resultado em sua própria linha.
A cadeia compactada é a constante inteira grande de @ ovs, convertida em binária e invertida. Em seguida, é dividido em 180 substrings de 5 caracteres, e a substring relevante para o caractere e a linha atuais é repetida.
Se o bit foi definido, imprima ciclicamente o próximo caractere da entrada filtrada, caso contrário, imprima um espaço.
Posicione o cursor pronto para imprimir o próximo caractere.
fonte
Perl 5 com
-nlaF/[^A-Za-z0-9]+|/
, 247 bytesExperimente online!
Explicação
Primeiro, uma tabela de pesquisa é criada
%l
usando opack
dados ed. Esses dados são uma sequência binária de 900 bits de cada caractere compactado como uma sequência binária de 25 bits (armazenada como 113 bytes - apenas 1 byte a mais do que carvão!), Semelhante a algumas outras respostas, assimA
é:que, usando o
0
espaço e1
paraA
é:e sem quebras de linha é:
Uma vez que a pesquisa é inicializado, que iterar sobre cada caractere válido
@F
(que é preenchida usando do Perl-a
opção utosplit) anexando a cada um dos 5 elementos da lista@;
para cada linha na matriz a partir da consulta, substituindo todos os1
s comuc$F[$i++%@F]
o que é o$i
th caractere (módulo@F
que é o comprimento de@F
) convertido emu
pperc
ase e todos os0
s com$"
padrões para o espaço. Uma vez que cada índice em@;
é preenchido para cada caractere@F
,say
imprime cada linha com uma nova linha à direita.Nota : a sequência depois
unpack
contém os imprimíveis que são escapados usando a\xXX
notação. Verificação para pontuação de 247 .fonte
SOGL V0.12 ,
165164163 bytesExperimente aqui!
Explicação:
fonte
JavaScript (Node.js) ,
365347 bytesGuardado 1 byte graças a @Scoots
Retorna uma matriz de 5 strings. Inclui um espaço à esquerda em cada linha.
3736 bytes são perdidos na conversão de tudo para maiúsculas e correspondência[A-Z0-9]
: - /Experimente online!
Codificação de caracteres
Os caracteres são codificados de cabeça para baixo e convertidos em uma base 80 personalizada com um deslocamento de 4 , usando o intervalo ASCII [35..114] .
Os valores 35 a 79 são mapeados diretamente para o caractere ASCII correspondente, enquanto os valores 0 a 34 são mapeados para os caracteres 80 a 114 . Isso permite decodificar apenas usando o módulo 80 do código ASCII .
Por exemplo, 'F' é codificado como
"RZW["
:Começando com i = v = 4 , ele é decodificado para um número inteiro de 25 bits, fazendo o seguinte:
No código completo, processamos uma fatia ilimitada () do fluxo codificado, o que significa que provavelmente iteramos significativamente mais de 4 vezes. Isso não é um problema, porque todas as iterações com i <0 afetam apenas a parte decimal do resultado, que é ignorada de qualquer maneira pelas operações bit a bit que se seguem imediatamente.
Experimente online!
fonte
toUpperCase
com ai
bandeira no RegEx?[A-Z\d]
vez de[A-Z0-9]
?C (gcc) ,
792690bytesExperimente online!
Conseguiu reduzir para menos de 800 com alguma reutilização variável. Optou por armazenar a fonte como uma matriz deint
s, como se armazená-la como uma sequência longa parecesse uma ideia atraente, pois muitos dos pedaços de 8 bits da fonte não eram um caractere ASCII conveniente e agradável que os códigos de escape estavam ocupando mais caracteres do que aint
matriz.Edit: Tenho menos de 700 mudando para uma codificação de string, afinal - um pouco inspirado por muitas das outras respostas aqui, juntei uma representação de base 92 usando (a maioria dos) caracteres ASCII imprimíveis. A representação inclui barras invertidas que precisam de um extra para serem escapadas, mas isso só acontece uma vez na fonte.
Fora isso, não há muita coisa chamativa - a entrada (que consiste no primeiro argumento da linha de comando) é copiada em uma matriz de pilha, menos os caracteres que não estão na fonte e com letras minúsculas substituídas por em maiúsculas, o caractere "pixel" em que cada letra completa começa é computado (usando
__builtin_popcount
um nome muito doloroso, mas ainda assim é melhor do que qualquer método de contagem de bits em que eu possa pensar) e, em seguida, a impressão passa por linha. O compilador, é claro, gera várias vezes a duração do programa em avisos.Um pouco degolfed abaixo para seu prazer visual:
fonte
Excel VBA, 816 bytes
Uma função de janela imediata anônima do VBE que leva as entradas do intervalo
[A1]
e as saídas para o console.Tanto quanto sei, esta é a primeira resposta do VBA a usar a
base64
compactação.Nota: Esta resposta depende da
Microsoft XML, v3.0
referência do VBAExemplo de E / S
Ungolfed e Explained
A maior parte desta solução armazena a fonte grande como uma string de base 64. Isso é feito primeiro convertendo a fonte em binário, onde
1
representa um pixel ligado e0
um pixel desligado. Por exemplo, para0
, isso é representado comoCom essa abordagem, os alfanuméricos podem ser representados como
Esses segmentos foram concatenados e convertidos para o MSXML base 64, renderizando
A sub-rotina abaixo leva isso, volta a converter-se em binário e usa-a como referência para criar uma sequência de saída, linha por linha, capturando primeiro os 5 pixels principais de cada caractere, depois a segunda linha e assim sucessivamente até que a sequência seja construída .
A sub-rotina itera sobre a sequência de saída e substitui os pixels 'ativados' pelos caracteres da sequência de entrada.
fonte
K (ngn / k) ,
230231 bytes(+1 byte após uma alteração no idioma impl)
Experimente online!
onde
a
é uma literal de cadeia de caracteres entre aspas que codifica a fonte. K vê seqüências de caracteres como seqüências de bytes, portanto, um programa que contém esse literal é válido, mas não pode ser executado no TIO, pois seu formato HTML tenta interpretá-lo como UTF-8 e estraga tudo.A contagem de bytes é calculada como:
119 relatados pelo TIO
-2 para nomear a função
f:
-1 para o espaço reservado
a
2 para um par de citações
""
113 para o comprimento da cadeia literal
a
que não contém caracteres que exijam escapefonte