Incorpore sua entrada

19

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.

Scoots
fonte
17
Eu sugiro garantir que a entrada contenha apenas[A-Z\d] - não acho que a filtragem de caracteres inválidos acrescente algo ao desafio.
Shaggy
3
@ Shagy Talvez. Mas, da mesma forma, não acho que isso elimine nada do desafio
Scoots
1
relacionado
Laikoni
1
Relacionado.
Dom Hastings
2
E quanto a três espaços principais? Certamente você não permitirá isso!
Magic Octopus Urn

Respostas:

16

Python 2 , 413 411 373 364 352 345 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.

k=list(filter(str.isalnum,input()))
q=range(5);o=['']*5;r=k*25;d=0
for c in'uM<LxSe#ye>El4NpD@$	gh>I,m]aB>e,]?kFLyglxV!%w832wGj%uT{Hr*K,*[P\n6.&ED#T}^DLI&p7f\d`*lG!FacG\rz?!A':d*=126;d+=ord(c)-1
for c in k:
 for i in q:
	for y in q+[999]*2:o[i]+=d>>int(c,36)*25+i*5+y&1and r.pop(0)or' '
print'\n'.join(o).upper()

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, o 0codificado pelos 25 bits menos significativos, os 125 bits seguintes e o Zcodificado pelos 25 bits mais significativos. Um único caractere é codificado na seguinte ordem:

00 01 02 03 04
05 06 07 08 09
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

( 00é o bit menos significativo, 25o mais significativo)

Os espaços são codificados por um zero, não espaços por um. Exemplo :

77777      11111
    7      00001
   7   =>  00010  => (0001000100010001000011111)
  7        00100
 7         01000

Ungolfed

k = list(filter(str.isalnum,input()))  # keep only alphanumeric characters of the input
o = ['']*5   # this list contains the output, initially 5 empty lines
r = k * 25   # make a copy of the input 25-times the length, these chars will be used for the pixels
data = 0
#  data encoded in base 126
b92d = 'uM<LxSe#ye>El4NpD@$	gh>I,m]aB>e,]?kFLyglxV!%w832wGj%uT{Hr*K,*[P\n6.&ED#T}^DLI&p7f\d`*lG!FacG\rz?!A'
for c in b92d:          # convert base 92 to base 10
  d*=126;d+=ord(c)-1

for c in k:             # iterate over the filtered input
  a_index = int(c, 36)  # the index of the current char in '0..9A..Z' / '0..9a..z'
  for i in range(5):    # for each row of the output
    for y in range(5)+[999]*2:  # for each pixel in the row, th two 999's are used for spaces
      is_set = data >> (a_index*25 + i*5 + y) & 1  # We shift the to the right to have ...
                                                   # the current pixels value at the LSB:
                                                   # 25 bits for each char that came before
                                                   # 5 bits for each previous row and 1 bit
                                                   # for every pixel in the same row
      o[i] += is_set and r.pop(0) or ' '           # If the current pixel is set, append ...
                                                   # ... a character from the input to the current row
print '\n'.join(o).upper()  # print the output

Experimente online!

ovs
fonte
As letras devem ser separadas por dois espaços, assim +' 'deve ser +' '. Boa resposta, independentemente, então +1 de mim.
Kevin Cruijssen
você precisa fazer a .upper()algum lugar que, caso contrário, as letras internas acabam minúsculas
Jo rei
@JoKing Você está certo, consertou.
ovs 15/06
Adoro esse truque de codificação. Você escolheu a base 92 porque essa é a maior codificação padrão que consiste em ascii imprimíveis? você poderia ter subido mais? Também pesquisei no Google, mas não consegui encontrar informações na base 92 - você tem um link?
Jonah
@ Jonah Não existe um padrão como a codificação base 92, é por isso que implementei minha própria lógica de decodificação. Contanto que você tenha dígitos distintos suficientes, poderá usar qualquer base >1.
OVS
10

APL (Dyalog Unicode) , 228 225 224 214 bytes

Programa completo. Solicita stdin para seqüência de caracteres. Imprime em stdout. Cerca de metade do código está apenas decodificando o alfabeto codificado.

⍉↓(⍴t)⍴r\i⍴⍨+/r←,t←(⊂ai←(1(819⌶)⍞)∩a←⎕D,⎕A)⌷0(220⌶)¯1(219⌶)¯125+⎕AV_________________________________________________________________________________________________________________________________________________

__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 LZ4

0(220⌶) desserializar para uma matriz booleana de 36 camadas, 5 linhas e 5 colunas

()⌷ Indexe usando os seguintes índices:

⎕AUm alfabeto em  maiúsculas

⎕D,Anexe  os D igits

a← armazenar em a(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 ( 819parece Big, 1 é para sim grande em vez de pequeno)

i← loja em i(para i Nput)

a⍳d índices disso ema

 coloque (para indexar com cada um representando a coordenada principal)

t← armazenar em t(por t ext)

, ravel (achatar)

r← armazenar em r(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 comprimento

r\ 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.

Adão
fonte
Não é bem assim! É preciso haver 2 espaços entre cada letra
Scoots
1
@Scoots OK, corrigido.
Adám
@ Adám algo está errado com C e D
ngn
9

Python 2 , 428 bytes

s=filter(str.isalnum,input().upper());x=s
R=['']*5
for c in s:
 i=0;exec"n=int('RAAAOQQ2RBAQBQRRBDRRDCDDAQ8QBRDDDDDRXDDF0XX6CCDDCDCCCD00ECNLDDEDC0DDD66YYABH0A3RQQRQCDOOFR00OCHHDQIQA0D6H0000DXL0CXYXDDDCDCCDD00ECDFDCEEX0D6N6044AQARRQYQADQBQRCBDRKDRDDAC9DQ0A0DD0R'[i*36+ord(c)%55%45],36);R[i]+=bin(n+36*(n<30)<<2)[3:].replace(*'0 ').replace(*'1.');i+=1;"*5
 while'.'in`R`:R=eval(`R`.replace('.',x[0],1));x=x[1:]+s
print'\n'.join(R)

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.

  part      bin      1+bin     int     base36
'  ...' -> 00111 -> 100111 ->   39  ->   13

Os números base-36 resultantes são:

[10,12,13,14,16,18,19,1A,1B,1C,1D,1E,1F,1H,1I,1K,1L,1N,1O,1Q,1R,X,Y]

A inicial 1é removida, portanto, temos um único caractere:

[0,2,3,4,6,8,9,A,B,C,D,E,F,H,I,K,L,N,O,Q,R,X,Y]

Cada letra ( A-Z0-9) é então codificada para cinco desses novos caracteres.

0 = ' ... ','.  ..','. . .','..  .',' ... ' -> A,F,H,L,A
1 = '...  ','  .  ','  .  ','  .  ','.....' -> O,0,0,0,R
etc.

Em cinco listas:

'AOQQ2RBRAAAQBQRRBDRRDCDDAQ8QBRDDDDDR'
'F0XX6CCXDDDDCDCCCD00ECNLDDEDC0DDD66Y'
'H0A3RQQYABRQCDOOFR00OCHHDQIQA0D6H000'
'L0CXYXD0DXDDCDCCDD00ECDFDCEEX0D6N604'
'ARRQYQA4AQDQBQRCBDRKDRDDAC9DQ0A0DD0R'

Para mapear a entrada para um índice nessas listas, o ordinal é modificado:

'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ord(c) = [48-57, 65-90]
ord(c)%55%45 = [3-9, 0-2, 10-35]

Como os ordinais não são de 0 a 35, mas são levemente misturados, as 5 listas são reorganizadas e concatenadas:

'RAAAOQQ2RBAQBQRRBDRRDCDDAQ8QBRDDDDDR'
'XDDF0XX6CCDDCDCCCD00ECNLDDEDC0DDD66Y'
'YABH0A3RQQRQCDOOFR00OCHHDQIQA0D6H000'
'0DXL0CXYXDDDCDCCDD00ECDFDCEEX0D6N604'
'4AQARRQYQADQBQRCBDRKDRDDAC9DQ0A0DD0R'
->
'RAAAOQQ2RBAQBQRRBDRRDCDDAQ8QBRDDDDDRXDDF0XX6CCDDCDCCCD00ECNLDDEDC0DDD66YYABH0A3RQQRQCDOOFR00OCHHDQIQA0D6H0000DXL0CXYXDDDCDCCDD00ECDFDCEEX0D6N6044AQARRQYQADQBQRCBDRKDRDDAC9DQ0A0DD0R'

Para cada caractere na entrada, são encontradas 5 letras e convertidas em ints (base36):

n=int('RAAA...D0R'[i*36+ord(c)%55%45],36)
                   i*36                    #get row i
                        ord(c)%55%45       #n -> 0..35
  int(                               ,36)  #convert to int

Se o número estiver abaixo 30, 36é adicionado (a falta 1que removemos anteriormente)

n+36*(n<30)

Em seguida, o número é convertido novamente em binário e 0s e 1s são convertidos em e .. Dois espaços são adicionados no final durante a conversão.

bin(n+36*(n<30)<<2)[3:].replace(*'0 ').replace(*'1.')

    n+36*(n<30)                                       #add leading base36 '1'
               <<2                                    #add 2 0's to end
bin(              )                                   #convert to binary string
                   [3:]                               #remove '0b1' from front
                       .replace(*'0 ').replace(*'1.') #replace 0 and 1

Por exemplo.

C    base36    int     <<2       bin-str        str
3 ->   13   ->  39  ->  156 -> 0b10011100 -> '  ...  '

Para cada um .no resultado, ele é substituído pelo próximo caractere da entrada (iterado por x)

while'.'in`R`:R=eval(`R`.replace('.',x[0],1));x=x[1:]+s
TFeld
fonte
Agradável! Eu poderia incomodá-lo por uma explicação de como isso funciona? No momento, isso é mágica para os meus olhos.
Scoots
@Scoots On it! :) #
586 TFeld
3
Obrigado por acrescentando que :) A esperteza vejo nas respostas neste site nunca deixa de me impressionar
Scoots
Como as peças têm 5 bits, por que não usar a base 32?
187 Neil
6

Java 8, 917 907 bytes

int i,l;String[]S;s->{String q=" ",t="",r[]={t,t,t,t,t};S=s.toUpperCase().replaceAll("[^A-Z0-9]",t).split(t);i=-1;l=S.length;for(String c:S){r[0]+=s("12357BDEFHIJKLMNPRTUVWXYZ",c)+s("012356789ABCDEFGIJOPQRSTZ",c)+s("0123456789ABCDEFGIJOPQRSTZ",c)+s("023456789ABCDEFGIJOPRSTZ",c)+s("567CEFGHIJKMNSTUVWXYZ",c)+q;r[1]+=s("05689ABCDEFGHKLMNOPQRSUVW",c)+s("4MNXY",c)+s("1IJT",c)+s("04KMQXYZ",c)+s("023789ABDHMNOPRUVW",c)+q;r[2]+=s("0456ABCDEFGHKLMNOPQRUW",c)+s("245689ABEFHKPRSV",c)+s("012345689ABEFHIJKMNPQRSTWXYZ",c)+s("23456789ABGHPQRSV",c)+s("0349ADGHMNOUW",c)+q;r[3]+=s("0268ABCDEFGHKLMNOPQRUW",c)+s("0VWXZ",c)+s("17IJTY",c)+s("4KNQRVWX",c)+s("035689ABDGHMNOSUW",c)+q;r[4]+=s("12359ABDEFHIJKLMNPRSWXZ",c)+s("012356789BCDEGIJLOQSUZ",c)+s("01235689BCDEGILOQSTUVYZ",c)+s("012345689BCDEGILOSUZ",c)+s("12ACEGHIKLMNQRWXZ",c)+q;}return"".join("\n",r);}String s(String...s){return s[0].contains(s[1])?S[++i%l]:" ";}

Vai jogar daqui para baixo, pelo menos, pela metade, esperançosamente ..

Experimente online.

Explicação:

int i,                         // Index-integer on class-level
    l;                         // Length-integer on class-level
String[]S;                     // String-array of characters on class-level

s->{                           // Method with String as both parameter and return-type
  String q="  ",               //  Temp String containing two spaces to reduce bytes
         t="",                 //  Temp Empty String to reduce bytes
         r[]={t,t,t,t,t};      //  Start with five empty rows
  S=s.toUpperCase()            //  Transform the input-String to uppercase
     .replaceAll("[^A-Z0-9]",t)//  Remove all non alphanumeric characters
     .split(t);                //  And transform it into a String-array of characters
  i=-1;                        //  Set the index-integer on -1 to start with
  l=S.length;                  //  Set the length of the modified input
  for(String c:S){             //  Loop over the characters of the modified input:
    r[0]+=                     //   Append to the first row:
          s("12357BDEFHIJKLMNPRTUVWXYZ",c)      // The first pixel
          +s("012356789ABCDEFGIJOPQRSTZ",c)     // The second pixel
          +s("0123456789ABCDEFGIJOPQRSTZ",c)    // The third pixel
          +s("023456789ABCDEFGIJOPRSTZ",c)      // The fourth pixel
          +s("567CEFGHIJKMNSTUVWXYZ",c)         // The fifth pixel
          +q;                                   // Two trailing spaces
    r[1]+=                     //   Append to the second row:
          s("05689ABCDEFGHKLMNOPQRSUVW",c)      // The first pixel
          +s("4MNXY",c)                         // The second pixel
          +s("1IJT",c)                          // The third pixel
          +s("04KMQXYZ",c)                      // The fourth pixel
          +s("023789ABDHMNOPRUVW",c)            // The fifth pixel
          +q;                                   // Two trailing spaces
    r[2]+=                     //   Append to the third row:
          s("0456ABCDEFGHKLMNOPQRUW",c)         // The first pixel
          +s("245689ABEFHKPRSV",c)              // The second pixel
          +s("012345689ABEFHIJKMNPQRSTWXYZ",c)  // The third pixel
          +s("23456789ABGHPQRSV",c)             // The fourth pixel
          +s("0349ADGHMNOUW",c)                 // The fifth pixel
          +q;                                   // Two trailing spaces
    r[3]+=                     //   Append to the fourth row:
          s("0268ABCDEFGHKLMNOPQRUW",c)         // The first pixel
          +s("0VWXZ",c)                         // The second pixel
          +s("17IJTY",c)                        // The third pixel
          +s("4KNQRVWX",c)                      // The fourth pixel
          +s("035689ABDGHMNOSUW",c)             // The fifth pixel
          +q;                                   // Two trailing spaces
    r[4]+=                     //   Append to the fifth row:
          s("12359ABDEFHIJKLMNPRSWXZ",c)        // The first pixel
          +s("012356789BCDEGIJLOQSUZ",c)        // The second pixel
          +s("01235689BCDEGILOQSTUVYZ",c)       // The third pixel
          +s("012345689BCDEGILOSUZ",c)          // The fourth pixel
          +s("12ACEGHIKLMNQRWXZ",c)             // The fifth pixel
          +q;}                                  // Two trailing spaces
  return"".join("\n",r);}      //  Return the rows joined with new-lines

//  Separated method with String-varargs parameter and String return-type
String s(String...s){          
  return s[0].contains(s[1])?  //  If the String contains the character-String:
                               //   Increase `i` by 1 first with `++i`
    S[++i%l]                   //   Then return the i'th character of the modified input
                               //   with wraparound by using modulo-`l`
   :                           //  Else:
    " ";}                      //   Return a space
Kevin Cruijssen
fonte
Você não parece ter um exemplo independente. Campos de classe, métodos e lambdas. Marquei com +1 como esperado, mas a maneira aqui parece um pouco inválida.
Olivier Grégoire
@ OlivierGrégoire Hmm, achei que os campos no nível da classe eram permitidos, desde que você não os definisse no nível da classe (a função precisa ser executada várias vezes sem redefinir nada para ser independente). É por isso que eu tenho o i=-1interior 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.
Kevin Cruijssen
Eu não sei. Por isso usei a palavra "parece". Mas isso seria uma maneira derivada de instanciar valores primitivos para o padrão, tendo um impacto significativo para muitas respostas no golfe. Por exemplo: int i;f->{for(;i++<10;)print(i);}é 1 byte menor que f->{for(int i=0;i++<10;)print(i);}.
Olivier Grégoire
@ OlivierGrégoire Foi por isso que afirmei que i=-1está 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).
Kevin Cruijssen
5

Japt v2.0a0 -R, 213 211 210 209 206 193 191 190 bytes

Inclui um espaço à esquerda em cada linha.

uf \ w
£ `...` ò4 gXn36) nLõd) ¤r0S r1 @ gT ° ò5n) ù6y m¸

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 ( 0para espaços, 1para caracteres) com as novas linhas removidas e convertidas para a base-100.

Exemplo

ZZZZZ -> 11111
   Z  -> 00010
  Z   -> 00100 -> 1111100010001000100011111 -> 32575775 -> !::L
 Z    -> 01000
ZZZZZ -> 11111

O código

                                                :Implicit input of string U
u                                               :Uppercase
  f                                             :Get the array of characters matching
   \w                                           : /[a-z0-9]/gi
\n                                              :Reassign to U
£                                               :Map each character as X
 `...`                                          :  The string described above
      ò4                                        :  Split into strings of length 4
          Xn36                                  :  Convert X from base-36 to decimal
         g    )                                 :  Get the element in the array at that index
                Lõ                              :  Range [1,100]
                  d                             :  Get characters at those codepoints
               n   )                            :  Convert from that base to decimal
                    ¤                           :  Convert to binary
                     r0S                        :  Replace all 0s with spaces
                         r1                     :  Replace all 1s
                           @                    :  By passing each match through a function
                             T°                 :    Postfix increment T (initially 0)
                            g                   :    Get the character in U at that index (Yay, index wrapping!)
                               Ã                :  End replacement
                                ò5n)            :  Split into strings of length 5, weighted towards the end
                                    ù6          :  Left pad each with spaces to length 6
                                      Ã         :End mapping
                                       y        :Transpose
                                         m      :Map
                                          ¸     :  Join with spaces
                                                :Implicitly join with newlines and output
Shaggy
fonte
4

Ruby , 366 bytes

->s{s.tr!('^0-9A-Za-z','');b=([s]*s.size).map(&:chars);%w(esuu6vfveeeufuvvfhvvhghheucufvhhhhhv j411agg1hhhhghgggh44igrphhihg4hhhaa2 l4e7vuu2efvughssjv44sgllhumue4hal444 p4g121h4h1hhghgghh44ighjhgii14hara48 evvu2ue8euhufuvgfhvohvhhegdhu4e4hh4v).map{|x|w=t='';s.chars{|c|c=~/\w/&&w+="%5b  "%x[c.to_i 36].to_i(36)};w.size.times{|i|t+=w[i]>?0?b[i/7].rotate![-1]:' '};t}}

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.

 AAA   -> 01110 -> E
A   A  -> 10001 -> H
AAAAA  -> 11111 -> V
A   A  -> 10001 -> H
A   A  -> 10001 -> H

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.

GB
fonte
4

Carvão , 172 164 bytes

≔⁺⭆χιαα≔Φ↥S№αιθFθ«E⁵⭆§⪪”)∧%"<⁰ETV´el⟧2[◧À&η²p.±‹§K×GR←∨�X¶⌈hF)ξυ9DUuqε↘Z)s⎚H⊙←<¿.&]~b≧✂⪪XïJ61%ZWm/ειK⮌λ﹪▷(σΠNc←º✳Fb⌕⊘¹ÞEpM&➙δl◨α↑j≕ςL¡ρG⁰/y”⁵⁺κ×⁵⌕αι⎇Iμ§θ⊖L⊞Oυω M⁷±⁵

Experimente online! Link é a versão detalhada do código. Explicação:

≔⁺⭆χιαα

Prefixe os dígitos ao alfabeto maiúsculo predefinido.

≔Φ↥S№αιθ

Coloque em maiúscula a entrada e filtre todos os caracteres não suportados.

Fθ«

Passe pelos caracteres restantes.

E⁵

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.

⎇Iμ§θ⊖L⊞Oυω 

Se o bit foi definido, imprima ciclicamente o próximo caractere da entrada filtrada, caso contrário, imprima um espaço.

M⁷±⁵

Posicione o cursor pronto para imprimir o próximo caractere.

Neil
fonte
3

Perl 5 com -nlaF/[^A-Za-z0-9]+|/, 247 bytes

@l{0..9,A..Z}=unpack("b*",q&....!.?.......G...../.......\....c|...C......'..N.>..c.1~B......I1..~.5.8k....^|!...}.......BH.1..."1..."*FE.....&)=~/.{25}/g;eval'$;[$j%5].=($l{+uc}=~/.{5}/g)[$j++%5]=~s/./$&?uc$F[$i++%@F]:$"/ger.$"x2;'x5for@F;say for@

Experimente online!


Explicação

Primeiro, uma tabela de pesquisa é criada %lusando 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, assim Aé:

 AAA 
A   A
AAAAA
A   A
A   A

que, usando o 0espaço e 1paraA é:

01110
10001
11111
10001
10001

e sem quebras de linha é:

0111010001111111000110001

Uma vez que a pesquisa é inicializado, que iterar sobre cada caractere válido @F(que é preenchida usando do Perl -aopção utosplit) anexando a cada um dos 5 elementos da lista @;para cada linha na matriz a partir da consulta, substituindo todos os 1s com uc$F[$i++%@F]o que é o $ith caractere (módulo @Fque é o comprimento de @F) convertido em upper case e todos os 0s com $"padrões para o espaço. Uma vez que cada índice em@; é preenchido para cada caractere @F, sayimprime cada linha com uma nova linha à direita.

Nota : a sequência depois unpackcontém os imprimíveis que são escapados usando a \xXXnotação. Verificação para pontuação de 247 .

Dom Hastings
fonte
3

SOGL V0.12 , 165 164 163 bytes

⁰CīøDs8↓3‛⁸⁷ω8<t↑\≈⅓dPb¦l═│ƹč<⁷i3ζ°@Ο≠ΖηKπ⁴Φd←⅔Ωī$∞ΧΗf▼xƧqWƨ∑ģpc!ƨ@┐Γ<§5ΛMn«Ιq;⁾№╔1xdψBN≤⁴ζ8□\b╗³╤>↔²Μ±}H}≤╬bφIæ7“2─{rƧ- W}⁰∑M¼nEU{SUZ+;W:?ew;cF+C}X}⁰┌cŗā;{√┼@L*┼

Experimente aqui!

Explicação:

...“                 big long number of the character data
    2─               convert to a base 2 string
      {r    }        for each number in it
        Ƨ- W           get it's index in "- ": space for 0, dash for 1
             ⁰∑      join up the results
               M¼n   split into groups of 25 - the letters
                  E  save that in variable E

U{                 }⁰ map over the input uppercased
  SUZ+                  push 1234567890 + the alphabet
      ;W                get the current characters index in that string
        :?       }      duplicate, if not 0 (aka if found)
          e               push the variable E
           w              get in it the duplicated number'th item
                            this leavesleaving the array below the item
            ;             get the array ontop
             cF+C         append the character to the array C
                  X     and remove the top item - either the duplicate or the array

┌             push "-"
 c            load the variable C
  ŗ           cycically replace "-" in maps result with the characters of C
   ā          push an empty array - the output
    ;{        for each item in the result of the replacement
      √         squareify it
       ┼        and append that to the output array
        @L*┼    top-to-bottom, left-to-right add 10 spaces to the array
dzaima
fonte
2

JavaScript (Node.js) , 365 347 bytes

Guardado 1 byte graças a @Scoots

Retorna uma matriz de 5 strings. Inclui um espaço à esquerda em cada linha.

37 36 bytes são perdidos na conversão de tudo para maiúsculas e correspondência [A-Z0-9]: - /

a=>(a=a.toUpperCase(s=[...'     ']).match(/[A-Z\d]/g)).map(x=c=>(g=n=>n<35&&g(n+1,s[n<25?n/5|0:n%5]+=Buffer("mJ*Z?<^#?.&+o@V+`L7ho=Jkm?`:Tm)Km?ZZo@p*#MmjoCZ[=('ZoC#;?-g[RZW[>.cJ#Mmm?<^;Vp5[#p*]?,iM#KAm$$:Mm?0*R[#;-46B#qC;o==*X$(km?0-XDc=$.Mm#%]=X$*-?1M[".slice(parseInt(c,36)*(i=v=4))).map(c=>v+=c%80*80**--i)|v>>n&n<25?a[++x]||a[x=0]:' '))(0))&&s

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[":

....#     00001
....#     00001
..### --> 00111 --> 0000100001001110000111111 --[decimal]--> 1088575 --[-4]--> 1088571
....#     00001
#####     11111

floor(1088571 / 80**3)        = 2    --> (( 2 + 45) mod 80) + 35 = 82  --> 'R'
floor(1088571 / 80**2) mod 80 = 10   --> ((10 + 45) mod 80) + 35 = 90  --> 'Z'
floor(1088571 / 80)    mod 80 = 7    --> (( 7 + 45) mod 80) + 35 = 87  --> 'W'
1088571                mod 80 = 11   --> ((11 + 45) mod 80) + 35 = 91  --> '['

Começando com i = v = 4 , ele é decodificado para um número inteiro de 25 bits, fazendo o seguinte:

Buffer("RZW[").map(c => v += c % 80 * 80 ** --i)

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!

Arnauld
fonte
Você pode substituir toUpperCasecom a ibandeira no RegEx?
Shaggy
@ Shaggy Isso deixaria os caracteres minúsculos inalterados na saída, o que eu acho que não é permitido.
Arnauld
Ah, parece que você está certo, eu senti falta disso. Melhor atualizar minha própria solução!
Shaggy
1
Você poderia salvar um byte combinando em [A-Z\d]vez de [A-Z0-9]?
Scoots
1

C (gcc) , 792690 bytes

#define S strlen
#define V v[1][i]
#define A putchar(32);
#define F(x)(((G(x,0)*92+G(x,1))*92+G(x,2))*92+G(x,3))*92+G(x,4))
#define G(x,y)(f[(x-(x<58?48:55))*5+y]-35)
i,j,l;main(c,v)char**v;{l=S(v[c=1]);char*x[l],t[l+1],*p=t,*f="$dKqK&>%Q3&R`ms&RYXg#gAB/&b_R/$n>Pw&]?vO$cbu+$ccG#$csC+&X7sS$n0w[&X+={&b^%s&b^$W$n3qS%(4\\_&^Bjg&^Bj/%(Pec$xx%S%+L`/%*jjw$cel7&X7oS$NWLO&X7u3$n.U+&^BhG%(')k%'|*/%(+:'%%UO;%%U=K&]`{+";*x=t;for(;i<l;i++){V>96?V-=32:V;(V>47)&(V<58)|(V>64)&(V<91)?*(p++)=V:V;}*p=0;for(;c<S(t);)x[c++]=((__builtin_popcount(F(t[c-1])+x[c-1]-t)%S(t))+t;for(c=6;--c;){for(i=0;i<S(t);i++){for(j=5,l=1<<c*5+3;j--;)if((l>>=1)&F(t[i]){putchar(*x[i]++);!*x[i]?x[i]=t:x;}else A A A}puts(p);}}

Experimente online!

Conseguiu reduzir para menos de 800 com alguma reutilização variável. Optou por armazenar a fonte como uma matriz de ints, 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 a intmatriz.

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:

//The defines are listed here for reference. Some are replaced in the below code but I still use F() because it's long.
#define S strlen
#define V v[1][i]
#define A putchar(32);
#define F(x)(((G(x,0)*92+G(x,1))*92+G(x,2))*92+G(x,3))*92+G(x,4))  //How to lookup a font character given an input char x
#define G(x,y)(f[(x-(x<58?48:55))*5+y]-35)                         //Used for looking up the individual parts of a character font
i, j, l;                                           // Declaring some int variables for later use.
main(c,v) char**v; {                               // Declaring afterwards lets us have the int arg default without declaring it
  l = strlen(v[c=1]);                              // Using l as a local variable to shorten S(v[1]) and also giving c an initial value here where there was a spare 1, saving a character over writing the full c=1 init in a later for loop.
  char t[l+1], *p=t, *x[l];                        // Declaring char arrays and char*s and char* arrays. t is oversized if there are any invalid characters in the input, but that's not important for golfing.
  char *f="$dKqK&>%Q3&R`ms&RYXg#gAB/&b_R/$n>Pw&]?vO$cbu+$ccG#$csC+&X7sS$n0w[&X+={&b^%s&b^$W$n3qS%(4\\_&^Bjg&^Bj/%(Pec$xx%S%+L`/%*jjw$cel7&X7oS$NWLO&X7u3$n.U+&^BhG%(')k%'|*/%(+:'%%UO;%%U=K&]`{+";      // The font, encoded base-92 with 5 characters to a letter in the order 0123456789ABCDEF... etc.
  *x=t;                                            // The first character's "pixels" will start at the beginning of the valid input.
  for(; i<strlen(l); i++){                         // Speaking of which, now validate the input.
    v[1][i] > 96 ? v[1][i] -= 32 : v[1][i];        // Change lowercase characters to uppercase. If they aren't actually lowercase characters but have ascii value >96, they won't end up valid after this either and will be edited out on the next line. The false case does nothing, but since with the macro it is one character using the ternary operator saves a character over an if statement even though that case ends up redundant.
    (v[1][i]>47)&(v[1][i]<58)|(v[1][i]>64)&(v[1][i]<91)?*(p++)=v[1][i]:v[1][i];        // If the character is now either a numeral or an uppercase letter, set the next spot in the t array by way of the pointer p and then increment said pointer. 
  }
  *p=0;                                            // Add the null terminator to the t array, our validated input string.
  for(;c<strlen(t);) {                             // Now find out at what index each letter should start getting "pixels" from.
    x[c++] = ((__builtin_popcount(F(t[c-1])+x[c-1]-t)%strlen(t))+t;          // Use the builtin to get the number of on bits/pixels in the previous letter, then add that to the previous letter's starting pixel and take the modulus strlen() of the valid string.
  }
  for(c=6; --c;){                                  // Now start the actual printing. For each line...
    for(i=0; i<strlen(t); i++){                    // For each letter...
      for(j=5, l=1<<c*5+3; j--;) {                 // For each pixel of the 5 on this line...
        if((l>>=1) & F(t[i]) {                     // If it is on...
          putchar(*x[i]++);                        // Print it and increment the pixel-fetching pointer for this letter.
          !*x[i]?x[i]=t:x;                         // If said pointer hit the end of the valid input go back to the beginning.
        } else {
          putchar(32);                             // If it is an off pixel, print a space.
        }
      }
      putchar(32);                                 // After a letter, print two spaces.
      putchar(32);
    }
    puts(p);                                       // This is the cheapest way in character count I could come up with to output a newline. p currently points to the end of t, so it is an empty string and puts just adds a newline.
  }
}
SevenStarConstellation
fonte
652 bytes
ceilingcat 31/07
1

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 base64compactação.

For i=1To[Len(A1)]:c=Mid(UCase([A1]),i,1):y=y &IIf(c Like"[0-9A-Z]",c,""):Next:l=Len(y):Set d=New MSXML2.DOMDocument:Set d=d.createElement("b64"):d.DataType="bin.base64":d.Text="HxHxCSEqRkVUjLvGSJSK0cUYIyGEfB8cfFH66Ju0kkHoo3cxRhdnzTHGuuOHEMIouYyYEPI/IeTH+GN8ccIHIYf/Qw6/jzH6ByF8PvroY/zR+fCic9FFh4gI30UPnw8efiG+Mj6c4D90wX9CCHe5Tgc=":b=d.nodeTypedValue:For i=0To 112:k=Right("00000" &Evaluate("=Dec2Bin("&b(i)&")"),8)&k:Next:For i=1To 5:For j=1To l:c=UCase(Mid(y,j,1)):Z=c Like"[0-9]":s=s &IIf(c Like"[A-Z]",Mid(k,IIf(Z,1,25*(Asc(c)-55)+5*i),5)&" ",IIf(Z,Mid(k,25*(Asc(c)-48)+5*i,5)&" ","")):Next:s=Replace(Replace(s,0," "),1,"#") &vbLf:Next:Do:i=InStr(1+(g*l+h)*6+g,s,"#"):p=(p-e)Mod l:e=i<(g*l+h+1)*6+g:s=IIf(e,Left(s,i-1)&Replace(s,"#",Mid(y,p+1,1),i,1),s):g=g-(0=e):h=h-(g>4):g=g Mod 5:Loop While InStr(1,s,"#"):?s

Nota: Esta resposta depende da Microsoft XML, v3.0 referência do VBA

Exemplo de E / S

[A1]="'0123456789"
For i=1To[Len(A1)]:c=Mid(UCase([A1]),i,1):y=y &IIf(c Like"[0-9A-Z]",c,""):Next:l=Len(y):Set d=New MSXML2.DOMDocument:Set d=d.createElement("b64"):d.DataType="bin.base64":d.Text="HxHxCSEqRkVUjLvGSJSK0cUYIyGEfB8cfFH66Ju0kkHoo3cxRhdnzTHGuuOHEMIouYyYEPI/IeTH+GN8ccIHIYf/Qw6/jzH6ByF8PvroY/zR+fCic9FFh4gI30UPnw8efiG+Mj6c4D90wX9CCHe5Tgc=":b=d.nodeTypedValue:For i=0To 112:k=Right("00000" &Evaluate("=Dec2Bin("&b(i)&")"),8)&k:Next:For i=1To 5:For j=1To l:c=UCase(Mid(y,j,1)):Z=c Like"[0-9]":s=s &IIf(c Like"[A-Z]",Mid(k,IIf(Z,1,25*(Asc(c)-55)+5*i),5)&" ",IIf(Z,Mid(k,25*(Asc(c)-48)+5*i,5)&" ","")):Next:s=Replace(Replace(s,0," "),1,"#") &vbLf:Next:Do:i=InStr(1+(g*l+h)*6+g,s,"#"):p=(p-e)Mod l:e=i<(g*l+h+1)*6+g:s=IIf(e,Left(s,i-1)&Replace(s,"#",Mid(y,p+1,1),i,1),s):g=g-(0=e):h=h-(g>4):g=g Mod 5:Loop While i<InStrRev(s,"#"):?s
 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

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 1representa um pixel ligado e 0um pixel desligado. Por exemplo, para 0, isso é representado como

      ###     01110
     #  ##    10011
0 -> # # # -> 10101 --> 0111010011101011100101110
     ##  #    11001
      ###     01110

Com essa abordagem, os alfanuméricos podem ser representados como

0: 0111010011101011100101110    1: 1110000100001000010011111
2: 1111000001011101000011111    3: 1111000001001110000111110
4: 0011001010111110001000010    5: 1111110000111100000111110
6: 0111110000111101000101110    7: 1111100001000100010001000
8: 0111010001011101000101110    9: 0111010001011110000111110
A: 0111010001111111000110001    B: 1111010001111101000111110
C: 0111110000100001000001111    D: 1111010001100011000111110
E: 1111110000111001000011111    F: 1111110000111001000010000
G: 0111110000100111000101111    H: 1000110001111111000110001
I: 1111100100001000010011111    J: 1111100100001000010011000
K: 1000110010111001001010001    L: 1000010000100001000011111
M: 1000111011101011000110001    N: 1000111001101011001110001
O: 0111010001100011000101110    P: 1111010001111101000010000
Q: 0110010010101101001001101    R: 1111010001111101001010001
S: 0111110000011100000111110    T: 1111100100001000010000100
U: 1000110001100011000101110    V: 1000110001010100101000100
W: 1000110001101011101110001    X: 1000101010001000101010001
Y: 1000101010001000010000100    Z: 1111100010001000100011111

Esses segmentos foram concatenados e convertidos para o MSXML base 64, renderizando

HxHxCSEqRkVUjLvGSJSK0cUYIyGEfB8cfFH66Ju0kkHoo3cxRhdnzTHGuuOHEMIouYyYEPI/IeTH+GN8ccIHIYf/Qw6/jzH6ByF8PvroY/zR+fCic9FFh4gI30UPnw8efiG+Mj6c4D90wX9CCHe5Tgc=

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.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''
''  Embiggen Function
''
''  @Title  :   Embiggen
''  @Author :   Taylor Scott
''  @Date   :   15 June 2018
''  @Desc   :   Function that takes input, value, and outputs a string in which
''              value has been filtered to alphnumerics only, each char is then
''              scaled up to a 5x5 ASCII art, and each 'pixel' is replaced with
''              a char from value. Replacement occurs letter by letter, line by
''              line
''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function EMBIGGEN(ByVal value As String) As String

    Dim DOM         As New MSXML2.DOMDocument, _
        bytes()     As Byte

    Dim isNum       As Boolean, _
        found       As Boolean, _
        index       As Integer, _
        length      As Integer, _
        line        As Integer, _
        letter      As Integer, _
        pos         As Integer, _
        alphanum    As String, _
        char        As String, _
        filValue    As String, _
        outValue    As String

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''
    ''  Filter input
    ''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    For letter = 1 To Len(value) Step 1             ''  Iterate Accross `Value`
        Let char = Mid$(UCase(value), letter, 1)    ''  Take the nth char
        ''  If the char is alphnumeric, append it to a filtered input string
        Let filValue = filValue & IIf(char Like "[0-9A-Z]", char, "")
    Next letter
    Let length = Len(filValue)                      ''  store length of filValue

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''
    ''  Convert Constant from Base 64 to Byte Array
    ''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    With DOM.createElement("b64")           ''  Construct b64 DOM object
        Let .DataType = "bin.base64"        ''  define type of object`
        ''  Input constructed constant string shown above
        Let .Text = "HxHxCSEqRkVUjLvGSJSK0cUYIyGEfB8cfFH66Ju0kkHoo3cxRhdnz" & _
                     "THGuuOHEMIouYyYEPI/IeTH+GN8ccIHIYf/Qw6/jzH6ByF8PvroY/" & _
                     "zR+fCic9FFh4gI30UPnw8efiG+Mj6c4D90wX9CCHe5Tgc="
        Let bytes = .nodeTypedValue         ''  Pass resulting bytes to array
    End With

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''
    ''  Convert Byte Array to Byte String
    ''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    For index = 0 To 112 Step 1
        '' convert each byte to binary, fill left with `0`s and prepend
        Let alphanum = _
            Right("00000" & Evaluate("=Dec2Bin(" & bytes(index) & ")"), 8) & _
            alphanum
    Next index

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''
    ''  Construct Embiggened Binary String of Input Value
    ''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    For line = 1 To 5 Step 1                ''  iterate across lines
        For letter = 1 To length Step 1     ''  iterate across letters
            ''  take the corresponding letter from
            Let char = UCase(Mid(filValue, letter, 1))
            If char Like "[0-9]" Then       '' if it is a number,
                ''  Add the 5 bit corresponding to number at line
                Let outValue = outValue & _
                    Mid$(alphanum, 25 * Val(char) + 5 * line, 5) & " "
            ElseIf char Like "[A-Z]" Then   '' if it is a letter,
                ''  Add the 5 bits corresponding to letter at line
                Let outValue = outValue & _
                    Mid$(alphanum, 25 * (Asc(char) - 55) + 5 * line, 5) & " "
            End If
            Next letter
        Let outValue = outValue & IIf(line < 5, vbLf, "")
    Next line
    Let outValue = Replace(Replace(outValue, 0, " "), 1, "#")

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''
    ''  Replace #s with Input Value
    ''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Let pos = 0                             ''  Reset position in filValue
    Let line = 0                            ''  Reset line index
    Let letter = 0                          ''  Reset letter index
    Do
        ''  Find the index of the first `#` starting at line and letter
        Let index = _
            InStr(1 + (line * length + letter) * 6 + line, outValue, "#")
        ''  Iterate position in filValue if a `#` is found in that letter & line
        Let pos = (pos - found) Mod length
        ''  check to see if found index is in the correct letter
        Let found = index < (line * length + letter + 1) * 6 + line
        ''  iff so, replace that # with letter in filValue corresponding to pos
        Let outValue = IIf(found, _
            Left(outValue, index - 1) & _
                Replace(outValue, "#", Mid(filValue, pos + 1, 1), index, 1), _
            outValue)
        ''  if not found, them iterate line
        Let line = line - (found = False)
        ''  iterate letter every five iterations of line
        Let letter = letter - (line > 4)
        ''  Ensure that line between 0 and 4 (inc)
        Let line = line Mod 5
    ''  Loop while there are '#'s in outValue
    Loop While InStr(1, outValue, "#")

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''
    ''  Output
    ''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Let EMBIGGEN = outValue

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''
    ''  Clean Up
    ''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Set DOM = Nothoing
End Function
Taylor Scott
fonte
1

K (ngn / k) , 230 231 bytes

(+1 byte após uma alteração no idioma impl)

f:{{x,'"  ",/:y}/(#s;5;5)#@[(#c)#"";i;:;(#i:&c:,/(36 25#4_,/+2\a)s)#`c$b s:((b:(48+!10),65+!26)?x-32*(96<x)&x<123)^0N]}

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 aque não contém caracteres que exijam escape

ngn
fonte