Embiggen ваш вклад


19

Это немного похоже на эту запись, покрытую пылью, но я надеюсь, что мое вращение делает ее достаточно уникальной. Не смог найти ничего отговаривающего меня от публикации этого, но там довольно море.

Тем не мение! Соревнование:

Ваш код получает строку символов; Он преобразует это в версию той же строки в стиле ASCII-арта, но с уловом.

Входное преобразование

  • Поддерживаются только символы AZ и 0-9.
  • Строчные буквы преобразуются в прописные
  • Все остальное молча удаляется

Рисунок персонажа

  • Каждый «пиксель» увеличенного шрифта взят из входной строки
  • N-й пиксель равен n-му символу во входной строке. Если n больше длины входной строки, вернитесь назад к началу
  • Отдельные буквы нарисованы слева направо, сверху вниз
  • Последующие буквы выбирают свой индекс «пиксельных символов» с того места, где остановилась последняя буква (например, при длине ввода 10, если первая буква имела 9 пикселей, первый пиксель второй буквы будет отображаться с 10-м входным символом, вторая пиксель будет нарисован с 1-м входным символом)
  • Каждая буква нарисована в сетке 5x5, заполненной пробелами. Вы можете найти шрифт, который вы будете использовать, предварительно обработанный для вас, в этой папке или чуть ниже в этом посте.
  • Каждая буква нарисована на одной строке, поэтому общее количество разрывов строк в вашем выводе будет 4
  • Каждое письмо разделено 2 колонками пробелов

Шрифт

 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

Да, я знаю, что 4 и Q безобразны

Пример

вход

0123456789

Выход

 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 

Другой пример

вход

a3 B'2

Выход

 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

Стандартные лазейки запрещены. Код гольф, поэтому не будет зеленой галочки.


17
Я бы посоветовал гарантировать, что входные данные будут содержать только[A-Z\d] - я не думаю, что фильтрация недопустимых символов добавляет что-то сложное.
Лохматый

3
@ Шэгги Возможно. Но, к тому же, я не думаю, что это что-то снимает с соревнований
Scoots



2
А как насчет трех ведущих мест? Конечно, вы этого не допустите!
Волшебная Урна Осьминога

Ответы:


16

Python 2 , 413 411 373 364 352 345 байт

-1 байт благодаря Кевину Круйссену .
-9 байт благодаря Джо Кинг .
-1 байт благодаря Линн .

Строка данных содержит непечатаемые, экранированная версия ниже.

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()

Попробуйте онлайн!

Поскольку каждый символ имеет 25 пикселей, он может быть легко закодирован в 25 бит. Базовое число 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'кодирует все символы, кодируется младшими 0значащими 25 битами, 1следующими 25 битами и Zкодируется 25 старшими значащими битами. Отдельный символ кодируется в следующем порядке:

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наименее значимый, 25самый значимый бит )

Пробелы кодируются нулем, непустые - единицей. Пример :

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

Попробуйте онлайн!


Буквы должны быть разделены двумя пробелами, поэтому они +' 'должны быть +' '. Хороший ответ, так что +1 от меня.
Кевин Круйссен

.upper()хотя вам нужно где-нибудь, иначе внутренние буквы заканчиваются строчными буквами
Джо Кинг,

@JoKing Вы правы, исправили это.
овс

Люблю этот трюк кодирования. Вы выбрали базу 92, потому что это самая большая стандартная кодировка, состоящая из ascii для печати? Вы могли бы пойти выше? Кроме того, я погуглил, но не смог получить точную информацию о базе 92 - у вас есть ссылка?
Иона

@Jonah Нет такого стандарта, как базовая кодировка 92, поэтому я реализовал свою собственную логику декодирования. Пока у вас достаточно четких цифр, вы можете использовать любую базу >1.
овс

10

APL (Dyalog Unicode) , 228 225 224 214 байтов

Полная программа. Запрашивает стандартный ввод для строки. Печать на стандартный вывод. Около половины кода просто декодирует закодированный алфавит.

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

__Представляет следующую 143-байтовую строку в кодировке LZ4 в кавычках:"⊥\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ááЀ€€€€€€"

Попробуйте онлайн!

__ 143-байтовая LZ4-кодированная строка в кавычках

⎕AV⍳ɩ ndices о том , что в A Tomic V Ector (набор символов)

¯125+ добавьте -125 к этому (чтобы получить 8-битные целые числа со знаком)

¯1(219⌶) LZ4 распаковывать

0(220⌶) десериализация в логический массив из 36 слоев, 5 строк и 5 столбцов

()⌷ Индексировать это, используя следующие индексы:

⎕A прописные lphabet

⎕D, предварять D igits

a← хранить в a(для более lphabet)

()∩ Пересечение следующего и того (удаляет неверный ввод):

 запрос на ввод текста из стандартного ввода (консоль)

  1(819⌶) свернуть в верхний регистр ( 819похоже Big, 1 для да большой, а не маленький)

i← хранить в i(для я Nput)

a⍳ɩ ndices о том , что вa

 заключить (чтобы индексировать каждый из которых представляет ведущую координату)

t← хранить в t(для t ext)

, Равель

r← хранить в r(для т )

+/ сумма (то есть количество символов, необходимое для рисования произведения)

i⍴⍨циклический г eshape входного сигнала на эту длину

r\ расширить это; вставить пробелы в 0 с, потреблять буквы в 1 с

(…) Измените форму

⍴t форма текста

 разбить массив N на 5 на 5 на матрицу N на 5 художественных линий

транспонировать в матрицу 5 на N художественных линий (это выравнивает соответствующие строки символов)

По умолчанию APL разделяет простые элементы вложенного массива двумя пробелами.


Не совсем! Между буквами должно быть 2 пробела
Scoots

1
@ Scoots ОК, исправлено.
Адам

@ Adám что-то не так с С и Д
нгн

9

Python 2 , 428 байт

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)

Попробуйте онлайн!


Буквы кодируются следующим образом:

Каждая уникальная часть (их 23) преобразуется в двоичную, и перед ним добавляется 1. Затем он конвертируется в базу 36.

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

Результирующие цифры base-36:

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

Начальная 1буква удалена, поэтому у нас есть один символ:

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

Каждая буква ( A-Z0-9) затем кодируется в пять из этих новых символов.

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

В пять списков:

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

Чтобы сопоставить входные данные с индексом в этих списках, порядковый номер изменяется:

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

Поскольку порядковые номера не 0-35, а слегка смешаны, 5 списков переставлены и объединены:

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

Для каждого символа во входных данных, его 5 букв найдены и преобразованы в целые числа (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

Если номер ниже 30, 36добавляется (недостающее 1мы убрали ранее)

n+36*(n<30)

Затем число преобразуется обратно в двоичный код, а 0s и 1s преобразуются в и .. Два пробела добавляются в конце во время преобразования.

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

Например.

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

Для каждого .в результате он заменяется следующим символом из ввода (повторяется с помощью x)

while'.'in`R`:R=eval(`R`.replace('.',x[0],1));x=x[1:]+s

Ницца! Могу ли я побеспокоить вас за объяснение того, как это работает? На данный момент это волшебство для моих глаз.
Scoots

@ Scoots На этом! :)
TFeld

3
Спасибо за добавление этого :) Ум, который я вижу в ответах на этом сайте, никогда не перестает меня
удивлять

Так как части 5-битные, почему бы не использовать вместо них основание 32?
Нил

6

Java 8, 917 907 байт

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]:" ";}

Снизит ли это гольф, чтобы, по крайней мере, вдвое сократить текущий подсчет байтов?

Попробуйте онлайн.

Объяснение:

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

Кажется, у вас нет отдельного примера. Классовые поля, методы и лямбды. Я добавил +1 за то, что нашел время, как и ожидалось, но манера здесь кажется немного неверной.
Оливье Грегуар

@ OlivierGrégoire Хм, я думал, что поля уровня класса были разрешены, если вы не устанавливаете их на уровне класса (функция должна запускаться несколько раз без сброса чего-либо, чтобы быть автономным). Вот почему у меня i=-1внутри лямбда. Но, может быть, я ошибаюсь, и это не разрешено в соответствии с мета? РЕДАКТИРОВАТЬ: Нечто подобное делается довольно часто в C ответах.
Кевин Круйссен

Я не знаю. Вот почему я использовал слово «кажется». Но это был бы производный способ установить примитивные значения к их значениям по умолчанию, оказав значительное влияние на многие ответы в гольф. Например: int i;f->{for(;i++<10;)print(i);}на 1 байт меньше, чем f->{for(int i=0;i++<10;)print(i);}.
Оливье Грегуар

@ OlivierGrégoire Вот почему я заявил, что i=-1внутри лямбда-функции. Ваш пример не работает, если вы запускаете одну и ту же лямбду дважды, а мой - что является ключевым отличием. int i;f->{for(i=0;i++<10;)print(i);}будет разрешено, например, (хотя на самом деле не короче).
Кевин Круйссен

5

Japt v2.0a0 -R, 213 211 210 209 206 193 191 190 байтов

Включает ведущий пробел в каждой строке.

уф \ ш
£ `...` ò4 gXn36) nLõd) ¤r0S r1 @ gT ° ô5n) ù6à мой

Попробуйте или протестируйте все символы (дополнительные байты из-за того, что TIO еще не поддерживает Japt v2)


объяснение

Справочная таблица

Каждая группа из 4 символов в строке (представленная ...здесь для экономии места и потому что она содержит кучу непечатных элементов) является двоичным представлением каждого символа ( 0для пробелов, 1для символов) с удаленными символами новой строки и преобразованными в base-100.

пример

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

Код

                                                :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

4

Рубин , 366 байт

->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}}

Попробуйте онлайн!

Это может быть много в гольфе, но сейчас у меня не хватает времени и идей. Это было сложнее, чем я сначала думал, просто заставить его работать.

Как это устроено:

Это не так сложно понять, я просто объясню, как алфавит кодируется на примере. Каждая строка каждого символа преобразуется в двоичный файл, а затем в base-36.

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

Первым шагом является удаление всех не буквенно-цифровых символов из входной строки.

Затем я создаю таблицу поиска для окончательного рендеринга, потому что я хочу напечатать строку за строкой.

После этого, перебирая алфавитную строку, я создаю двоичный шаблон букв.

Наконец, я заменяю 0 пробелами и 1 символами из таблицы поиска.

Не стесняйтесь играть в гольф дальше, я знаю, что это может быть на 20-30 байт короче (используя gsub вместо tr и т. Д.), Но сейчас мне это не интересно, если только я не смогу значительно уменьшить таблицу алфавитов.


4

Древесный уголь , 172 164 байта

≔⁺⭆χιαα≔Φ↥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⁷±⁵

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

≔⁺⭆χιαα

Поставьте цифры перед предварительно заданным прописным алфавитом.

≔Φ↥S№αιθ

Прописные буквы ввода и отфильтровывают все неподдерживаемые символы.

Fθ«

Зациклите оставшиеся символы.

E⁵

Зацикливайтесь на каждой строке, неявно печатая каждый результат в отдельной строке.

⭆§⪪”...”⁵⁺κ×⁵⌕αι

Сжатая строка - это большая целочисленная константа @ ovs, преобразованная в двоичную и обращенная. Затем он нарезается на 180 подстрок по 5 символов, и соответствующая подстрока для текущего символа и строки затем зацикливается.

⎇Iμ§θ⊖L⊞Oυω 

Если бит был установлен, то циклически печатать следующий символ отфильтрованного ввода, в противном случае печатать пробел.

M⁷±⁵

Поместите курсор готовым для печати следующего символа.


3

Perl 5 с -nlaF/[^A-Za-z0-9]+|/, 247 байт

@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@

Попробуйте онлайн!


объяснение

Сначала создается таблица соответствия с %lиспользованием packданных ed. Эти данные представляют собой 900-битную двоичную строку каждого символа, упакованную как 25-битную двоичную строку (хранится в виде 113 байтов - всего на 1 байт больше, чем уголь!), Аналогично некоторым другим ответам, поэтому A:

 AAA 
A   A
AAAAA
A   A
A   A

который, используя 0 для пространства и 1для Aэто:

01110
10001
11111
10001
10001

и без разрывов строки это:

0111010001111111000110001

После того , как поиск инициализируются, мы перебирать каждый действительный полукокс в @F(который заполняется с помощью Perl в -aопции utosplit) , добавляя к каждому из 5 элементов списка @;для каждой строки в массиве из поиска, заменяя все 1с с uc$F[$i++%@F]который является $iй символ (по модулю @Fэто длина @F), преобразованный в upper case, и все0 s с $"которыми по умолчанию пробел. Как только каждый индекс @;заполнен для каждого символа в @F, sayпечатает каждую строку с завершающей новой строкой.

Примечание : строка после unpackсодержит непечатаемые, которые экранируются с использованием \xXXнотации. Проверка на 247 баллов .


3

SOGL V0.12 , 165 164 163 байта

⁰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*┼

Попробуй здесь!

Объяснение:

...“                 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

2

JavaScript (Node.js) , 365 347 байт

Сохранено 1 байт благодаря @Scoots

Возвращает массив из 5 строк. Включает ведущий пробел в каждом ряду.

37 36 байтов теряются при преобразовании всего в верхний регистр и сопоставлении [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

Попробуйте онлайн!

Кодировка символов

Символы кодируются в обратном порядке и преобразуются в пользовательский base-80 со смещением 4 , используя диапазон ASCII [35..114] .

Значения с 35 по 79 напрямую отображаются на соответствующий символ ASCII, а значения с 0 по 34 отображаются на символы с 80 по 114 . Это позволяет декодировать, просто взяв код ASCII по модулю 80 .

Например, «F» кодируется как "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  --> '['

Начиная с i = v = 4 , он декодируется обратно в 25-битное целое число, выполняя:

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

В полном коде мы фактически обрабатываем неограниченный slice () закодированного потока, что означает, что мы, вероятно, будем выполнять итерацию значительно более 4 раз. Это не проблема, потому что все итерации с i <0 будут влиять только на десятичную часть результата, которая в любом случае игнорируется побитовыми операциями, которые следуют сразу.

Попробуйте онлайн!


Вы можете заменить toUpperCaseс iфлагом в RegEx?
лохматый

@Shaggy Это позволило бы изменить символы строчных букв в выводе, что, я думаю, недопустимо.
Арнаулд

Ах, похоже, ты прав, я пропустил это. Лучшее обновление моего собственного решения!
лохматый

1
Не могли бы вы сохранить байт путем сопоставления [A-Z\d]вместо [A-Z0-9]?
Scoots

1

C (gcc) , 792 690 байт

#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);}}

Попробуйте онлайн!

Удалось сжать это под 800 с некоторой переменной повторного использования. Было решено хранить шрифт в виде массива ints, хотя сохранение его в виде одной длинной строки выглядело как привлекательная идея, поэтому многие из 8-битных кусков шрифта не были удобным удобным ASCII-символом, который обрабатывали escape-коды больше символов, чем intсделал массив.

Редактировать: Получив менее 700, переключившись на строковое кодирование, в конце концов - в некоторой степени вдохновленный многими другими ответами, здесь я собрал воедино представление base-92 с использованием (большей части) печатных символов ASCII. Представление включает в себя обратную косую черту, для которой требуется экранирование, но это происходит только один раз в шрифте.

Кроме этого, не так уж и много кричащего - ввод (состоящий из первого аргумента командной строки) копируется в массив стека, за исключением любых символов, которых нет в шрифте, а строчные буквы заменяются на их в верхнем регистре вычисляется символ "пикселя", с которого начинается каждая полная буква (с использованием __builtin_popcount имеет мучительно длинное имя, но все же было лучше, чем любой метод подсчета битов, который я мог придумать), а затем печать проходит построчно. Компилятор, конечно, в несколько раз выводит длину программы в виде предупреждений.

Несколько ниже для вашего удовольствия от просмотра:

//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.
  }
}


1

Excel VBA, 816 байт

Функция анонимного непосредственного окна VBE, которая принимает данные из диапазона [A1]и выводит их на консоль.

Насколько я знаю, это первый ответ VBA, который использует base64сжатие.

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

Примечание. Этот ответ зависит от Microsoft XML, v3.0ссылки на VBA.

Пример ввода / вывода

[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

Неуправляемый и объясненный

Основная часть этого решения хранит большой шрифт в виде базовой строки. Для этого сначала нужно преобразовать шрифт в двоичный файл, где он 1представляет собой пиксель, а 0не пиксель. Например, для 0, это представляется как

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

При таком подходе буквенно-цифровые цифры могут быть представлены как

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

Эти сегменты были объединены и преобразованы в MSXML base 64, что делает

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

Подпрограмма ниже принимает это, обратно преобразовывает в двоичный файл и использует эту ссылку, из которой строит выходную строку, строку за строкой, захватывая сначала верхние 5 пикселей каждого символа, затем вторую строку и так далее, пока строка не будет построена ,

Затем подпрограмма перебирает выходную строку и заменяет «включенные» пиксели символами из входной строки.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''
''  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

1

K (нгн / к) , 230 231 байт

(+1 байт после изменения языка)

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]}

Попробуйте онлайн!

где aстроковый литерал в кавычках, который кодирует шрифт. K рассматривает строки как последовательности байтов, поэтому программа, содержащая такой литерал, является действительной, но ее нельзя запустить на TIO, поскольку ее HTML-форма пытается интерпретировать ее как UTF-8 и портит ее.

Количество байтов рассчитывается как:

  • 119 сообщили TIO

  • -2 для обозначения функции f:

  • -1 для заполнителя a

  • 2 за пару цитат ""

  • 113 для длины строкового литерала, aкоторый не содержит символов, требующих экранирования

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.