Embiggen input Anda

19

Ini sedikit mirip dengan entri tertutup debu ini tetapi saya berharap putaran saya membuatnya cukup unik. Tidak dapat menemukan apa pun yang menghalangi saya untuk memposting ini tetapi ada cukup banyak lautan di luar sana.

Bagaimanapun! Tantangan:

Kode Anda menerima serangkaian karakter; Ini mengkonversi ini menjadi versi gaya ASCII-art dari string yang sama, tetapi dengan tangkapan.

Transformasi input

  • Satu-satunya karakter yang didukung adalah AZ dan 0-9
  • Huruf kecil diubah menjadi huruf besar
  • Ada lagi yang dihapus secara diam-diam

Menggambar karakter

  • Setiap "pixel" font yang diperbesar diambil dari string input
  • Pixel ke-n sama dengan karakter ke-n dalam string input. Jika n lebih besar dari panjang string input, balut kembali ke awal
  • Masing-masing huruf digambar dari kiri ke kanan, atas ke bawah
  • Huruf-huruf berikutnya mengambil indeks "karakter piksel" mereka dari tempat huruf terakhir ditinggalkan (misalnya dengan panjang input 10, jika huruf pertama memiliki 9 piksel, piksel pertama huruf kedua akan digambar dengan karakter input ke-10, yang kedua pixel akan ditarik dengan karakter input 1)
  • Setiap huruf digambar dalam kisi 5x5, penuh dengan spasi. Anda dapat menemukan font yang akan Anda gunakan untuk terjemahan sebelumnya di pastebin ini atau sedikit lebih jauh di bawah tulisan ini
  • Setiap huruf digambar pada baris yang sama, sehingga jumlah total jeda baris dalam output Anda adalah 4
  • Setiap huruf dipisahkan oleh 2 kolom spasi

Font

 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

Ya saya tahu 4 dan Q jelek

Sebuah contoh

Memasukkan

0123456789

Keluaran

 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 

Contoh lain

Memasukkan

a3 B'2

Keluaran

 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

Celah standar dilarang. Kode golf sehingga tidak ada tanda centang hijau akan diberikan

Bergeser
sumber
17
Saya sarankan menjamin bahwa input hanya akan berisi [A-Z\d]- Saya tidak berpikir menyaring karakter yang tidak valid menambah tantangan.
Shaggy
3
@Shaggy Mungkin. Tetapi dengan cara yang sama saya tidak berpikir itu menghilangkan apa pun dari tantangan
Scoots
1
terkait
Laikoni
1
Terkait
Dom Hastings
2
Bagaimana dengan TIGA ruang terdepan? Tentunya Anda tidak akan membiarkan itu!
Magic Gurita Guci

Jawaban:

16

Python 2 , 413 411 373 364 352 345 byte

-1 byte terima kasih kepada Kevin Cruijssen .
-9 byte terima kasih kepada Jo King .
-1 byte terima kasih kepada Lynn .

String data berisi unsintables, versi yang lolos di bawah.

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

Cobalah online!

Karena setiap karakter memiliki 25 piksel, maka dapat dengan mudah dikodekan dalam 25 bit. Angka dasar 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'mengkodekan semua karakter, yang 0dikodekan oleh 25 bit paling signifikan, pada 25 bit 1berikutnya dan Zdikodekan oleh 25 bit paling signifikan. Satu karakter dikodekan dalam urutan berikut:

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

( 00Adalah bit 25paling signifikan , yang paling signifikan)

Spasi dikodekan oleh nol, bukan spasi oleh satu. Contoh :

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

Tidak disatukan

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

Cobalah online!

ovs
sumber
Surat harus dipisahkan oleh dua spasi, jadi +' 'harus begitu +' '. Jawaban yang bagus, jadi +1 dari saya.
Kevin Cruijssen
Anda memang membutuhkan .upper()suatu tempat, jika tidak huruf-huruf dalam berakhir dengan huruf kecil
Jo King
@JoKing Anda benar, perbaiki.
Ov
Suka trik penyandian ini. Apakah Anda memilih basis 92 karena itulah pengkodean standar terbesar yang terdiri dari ascii yang dapat dicetak? dapatkah kamu menjadi lebih tinggi? Saya juga googled tetapi tidak dapat info baik-baik saja di pangkalan 92 - apakah Anda memiliki tautan?
Jonah
@Jonah Tidak ada standar seperti basis 92-encoding, itu sebabnya saya menerapkan logika decoding saya sendiri. Selama Anda memiliki angka yang cukup berbeda, Anda dapat menggunakan basis apa saja >1.
Ov
10

APL (Dyalog Unicode) , 228 225 224 214 byte

Program lengkap. Meminta stdin untuk string. Mencetak ke stdout. Sekitar setengah dari kode hanya decoding alfabet yang dikodekan.

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

_... _mewakili string 143-byte LZ4 yang dikodekan dalam tanda kutip:"⊥\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ááЀ€€€€€€"

Cobalah online!

__ 143-byte LZ4-encoded string dalam tanda kutip

⎕AV⍳d Tuliskan itu di dalam A tomic V ector (set karakter)

¯125+ tambahkan -125 untuk itu (untuk menandatangani bilangan bulat 8-bit)

¯1(219⌶) Dekompresi LZ4

0(220⌶) deserialise ke 36 lapisan, 5 baris, 5 kolom array Boolean

(... )⌷ indeks ke dalam itu menggunakan indeks berikut:

⎕A huruf besar A lphabet

⎕D, tambahkan D igits

a← simpan di a(untuk sebuah lphabet)

(... )∩ persimpangan berikut ini dan itu (menghapus input yang tidak valid):

 meminta input teks dari stdin (konsol)

  1(819⌶) lipat ke huruf besar ( 819sepertinya Big, 1 untuk ya besar dan kecil)

i← simpan di i(untuk saya nput)

a⍳d Tuliskan itu dia

 terlampir (untuk mengindeks dengan masing-masing mewakili koordinat terkemuka)

t← simpan di t(untuk t ext)

, ravel (meratakan)

r← simpan di r(untuk r avelled)

+/ jumlah itu (yaitu jumlah karakter yang diperlukan untuk melukis karya seni)

i⍴⍨siklis r eshape input ke panjang yang

r\ perluas itu; masukkan spasi pada 0s, konsumsi huruf pada 1s

(...) ⍴` membentuk kembali ke bentuk berikut:

⍴t bentuk teks

 pisahkan array N-by-5-by5 menjadi matriks garis seni N-by-5

transpos ke dalam matriks garis seni 5-by-N (ini menyelaraskan garis karakter yang sesuai)

Secara default, APL memisahkan elemen sederhana dari array bersarang dengan 2 spasi.

Adm
sumber
Tidak terlalu! Harus ada 2 spasi di antara setiap huruf
Scoots
1
@Scoots OK, sudah diperbaiki.
Adám
@ Adám ada yang salah dengan C dan D
ngn
9

Python 2 , 428 byte

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)

Cobalah online!


Huruf-huruf tersebut dikodekan sebagai berikut:

Setiap bagian unik (ada 23) dikonversi ke biner, dan 1 ditambahkan di depan. Kemudian dikonversi ke basis 36.

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

Nomor base-36 yang dihasilkan adalah:

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

Inisial 1dihapus, jadi kami memiliki satu karakter:

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

Setiap huruf ( A-Z0-9) kemudian dikodekan ke lima karakter baru ini.

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

Ke dalam lima daftar:

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

Untuk memetakan input ke indeks dalam daftar ini, ordinal dimodifikasi:

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

Karena ordinal tidak 0-35, tetapi sedikit dicampur, 5 daftar disusun ulang, dan digabungkan:

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

Untuk setiap karakter dalam input, ditemukan 5 huruf, dan dikonversi menjadi int (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

Jika angkanya di bawah 30,36 ditambahkan (yang hilang 1kami hapus sebelumnya)

n+36*(n<30)

Kemudian nomor tersebut dikonversi kembali ke biner, dan 0s dan 1s dikonversi ke dan. . Dua spasi ditambahkan di akhir selama konversi.

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

Misalnya.

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

Untuk masing-masing .dalam hasil, itu digantikan oleh karakter berikutnya dari input (iterated oleh x)

while'.'in`R`:R=eval(`R`.replace('.',x[0],1));x=x[1:]+s
TFeld
sumber
Bagus! Bisakah saya menyulitkan Anda untuk penjelasan tentang cara kerjanya? Saat ini sihir bagiku.
Bergeser
@Boot di atasnya! :)
TFeld
3
Terima kasih telah menambahkan itu :) Kepintaran yang saya lihat dalam jawaban di situs ini tidak pernah gagal membuat saya terkesan
Scoots
Karena bagian-bagiannya adalah 5 bit, mengapa tidak menggunakan basis 32 saja?
Neil
6

Java 8, 917 907 byte

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

Akan golf itu turun dari sini untuk setidaknya membagi dua byte-count saat ini semoga ..

Cobalah online.

Penjelasan:

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
sumber
Anda sepertinya tidak memiliki contoh yang lengkap. Bidang kelas, metode, dan lambda. Saya memberi +1 untuk meluangkan waktu untuk melakukannya seperti yang diharapkan, tetapi cara di sini tampaknya agak tidak valid.
Olivier Grégoire
@ OlivierGrégoire Hmm, saya pikir bidang tingkat kelas diizinkan, selama Anda tidak mengaturnya di tingkat kelas (fungsi harus dijalankan beberapa kali tanpa mengatur ulang apa pun agar mandiri). Itulah sebabnya saya memiliki bagian i=-1dalam lambda. Tapi mungkin saya salah dan tidak diizinkan menurut meta? EDIT: Sesuatu yang serupa dilakukan cukup sering dalam jawaban C.
Kevin Cruijssen
Saya tidak tahu Itu sebabnya saya menggunakan kata "sepertinya". Tapi itu akan menjadi cara yang diturunkan untuk menanamkan nilai-nilai primitif ke default, memiliki dampak signifikan bagi banyak jawaban golf. Misalnya: int i;f->{for(;i++<10;)print(i);}lebih pendek 1 byte dari f->{for(int i=0;i++<10;)print(i);}.
Olivier Grégoire
@ OlivierGrégoire Itu sebabnya saya menyatakan i=-1ada di dalam fungsi lambda. Contoh Anda tidak berfungsi jika Anda menjalankan lambda yang sama dua kali, milik saya, yang merupakan perbedaan utama di sini. int i;f->{for(i=0;i++<10;)print(i);}akan diizinkan misalnya (meskipun tidak terlalu pendek).
Kevin Cruijssen
5

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

Termasuk ruang terdepan di setiap baris.

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

Cobalah atau uji semua karakter (byte tambahan disebabkan TIO belum mendukung Japt v2)


Penjelasan

Tabel Pencarian

Setiap grup yang terdiri dari 4 karakter dalam string (diwakili oleh ...sini untuk menghemat ruang dan karena mengandung banyak karakter yang tidak dimasukkan) adalah representasi biner dari setiap karakter ( 0untuk spasi, 1untuk karakter) dengan baris baru dihapus dan dikonversi ke basis-100.

Contoh

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

Kode

                                                :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
sumber
4

Ruby , 366 byte

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

Cobalah online!

Ini bisa bermain golf banyak, tapi sekarang saya sudah kehabisan waktu dan ide. Itu lebih sulit daripada yang saya pikirkan hanya untuk membuatnya bekerja.

Bagaimana itu bekerja:

Tidak terlalu sulit untuk dipahami, saya hanya akan menjelaskan bagaimana alfabet dikodekan dengan contoh. Setiap baris dari setiap karakter dikonversi ke biner dan kemudian ke base-36.

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

Langkah pertama adalah membuang semua karakter non-alfanumerik dari string input.

Kemudian saya membuat tabel pencarian untuk rendering akhir, karena saya ingin mencetak baris demi baris.

Setelah itu, iterasi pada baris alfabet, saya membuat pola biner dari huruf-huruf itu.

Akhirnya saya mengganti 0 dengan spasi dan 1 dengan karakter dari tabel pencarian.

Jangan ragu untuk bermain golf lebih lanjut, saya tahu ini bisa lebih pendek 20-30 byte (menggunakan gsub bukan tr, dan sebagainya), tapi saya tidak tertarik sekarang, kecuali saya bisa membuat tabel alfabet secara drastis lebih kecil.

GB
sumber
4

Arang , 172 164 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

≔⁺⭆χιαα

Awali digit ke alfabet huruf besar yang telah ditentukan.

≔Φ↥S№αιθ

Huruf besar input dan filter semua karakter yang tidak didukung.

Fθ«

Ulangi karakter yang tersisa.

E⁵

Ulangi setiap baris, secara implisit mencetak setiap hasil pada barisnya sendiri.

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

String yang dikompresi adalah konstanta integer besar @ ovs, dikonversi ke biner dan dibalik. Ini kemudian diiris menjadi 180 substring dari 5 karakter, dan substring yang relevan untuk karakter dan baris saat ini kemudian diulang.

⎇Iμ§θ⊖L⊞Oυω 

Jika bit disetel maka cetak secara siklik karakter input yang disaring selanjutnya cetak spasi.

M⁷±⁵

Posisikan kursor siap untuk mencetak karakter berikutnya.

Neil
sumber
3

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

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

Cobalah online!


Penjelasan

Pertama tabel pencarian dibuat %lmenggunakanpack data ed. Data ini adalah string biner 900-bit dari masing-masing char yang dikemas sebagai string biner 25-bit (disimpan sebagai 113 byte - hanya 1 byte lebih banyak dari arang!), Mirip dengan beberapa jawaban lain, demikian Ajuga:

 AAA 
A   A
AAAAA
A   A
A   A

yang, gunakan 0untuk ruang dan 1untukA adalah:

01110
10001
11111
10001
10001

dan tanpa jeda baris adalah:

0111010001111111000110001

Setelah pencarian diinisialisasi, kita beralih ke setiap karakter yang valid di @F(yang diisi menggunakan -aopsi utosplit Perl ) menambahkan ke masing-masing dari 5 elemen daftar @;untuk setiap baris dalam array dari pencarian, mengganti semua 1dengan uc$F[$i++%@F]yang merupakan bagian $idari karakter (modulo @Fyang panjangnya @F) dikonversikan menjadi upper case, dan semua 0s $"yang defaultnya adalah spasi. Setelah setiap indeks masuk @;diisi untuk setiap karakter dalam@F , saycetak setiap baris dengan baris baru.

Catatan : string sesudahnya unpackberisi unsintables yang lolos menggunakan \xXXnotasi. Verifikasi untuk skor 247 .

Dom Hastings
sumber
3

SOGL V0.12 , 165 164 163 byte

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

Coba Di Sini!

Penjelasan:

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

JavaScript (Node.js) , 365 347 byte

Disimpan 1 byte berkat @Scoots

Mengembalikan array 5 string. Termasuk ruang terdepan di setiap baris.

37 36 byte hilang dalam mengonversi semuanya menjadi huruf besar dan cocok [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

Cobalah online!

Pengkodean karakter

Karakter dikodekan terbalik dan dikonversi ke basis kustom-80 dengan offset 4 , menggunakan rentang ASCII [35..114] .

Nilai 35 hingga 79 secara langsung dipetakan ke karakter ASCII yang sesuai, sedangkan nilai 0 hingga 34 dipetakan ke karakter 80 hingga 114 . Ini memungkinkan untuk mendekode dengan hanya mengambil kode ASCII modulo 80 .

Misalnya, 'F' dikodekan sebagai "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  --> '['

Dimulai dengan i = v = 4 , itu diterjemahkan kembali ke integer 25-bit dengan melakukan:

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

Dalam kode lengkap, kami benar-benar memproses irisan tak terbatas () dari aliran yang disandikan, yang berarti bahwa kami cenderung untuk mengulangi secara signifikan lebih dari 4 kali. Ini bukan masalah karena semua iterasi dengan i <0 hanya akan mempengaruhi bagian desimal dari hasil, yang tetap diabaikan oleh operasi bitwise yang segera mengikuti.

Cobalah online!

Arnauld
sumber
Bisakah Anda mengganti toUpperCasedengan ibendera di RegEx?
Shaggy
@Shaggy Itu akan membiarkan karakter huruf kecil tidak berubah dalam output, yang saya pikir tidak diperbolehkan.
Arnauld
Ah, sepertinya kau benar, aku merindukan itu. Perbarui solusi saya sendiri!
Shaggy
1
Bisakah Anda menyimpan byte dengan mencocokkan [A-Z\d]bukan [A-Z0-9]?
Bergeser
1

C (gcc) , 792 690 byte

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

Cobalah online!

Berhasil memeras ini di bawah 800 dengan beberapa penggunaan kembali variabel. Memilih untuk menyimpan font sebagai array ints, seolah-olah menyimpannya sebagai satu string panjang tampak seperti ide yang menarik sehingga banyak dari potongan 8-bit font itu bukan karakter ASCII nyaman yang bagus bahwa kode melarikan diri mengambil lebih banyak karakter daripada intarray.

Sunting: Naik di bawah 700 dengan beralih ke pengkodean string setelah semua - agak terinspirasi oleh banyak tanggapan lain di sini saya dirakit bersama representasi basis-92 menggunakan (sebagian besar) karakter ASCII yang dapat dicetak. Representasi tidak termasuk garis miring terbalik yang perlu ekstra untuk melarikan diri tetapi itu hanya terjadi sekali dalam font.

Selain itu tidak ada banyak hal yang terlalu mencolok terjadi - input (terdiri dari argumen baris perintah pertama) disalin ke dalam susunan tumpukan, dikurangi karakter yang tidak ada dalam font dan dengan huruf kecil diganti dengan huruf mereka versi huruf besar, karakter "piksel" yang digunakan untuk setiap huruf mulai dihitung (menggunakan __builtin_popcount memiliki nama yang sangat panjang tetapi masih lebih baik daripada metode penghitungan bit yang dapat saya pikirkan), dan kemudian pencetakan dilakukan baris demi baris. Compiler tentu saja menampilkan beberapa kali panjang program dalam peringatan.

Agak merosot di bawah untuk kesenangan menonton Anda:

//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
sumber
652 byte
ceilingcat
1

Excel VBA, 816 byte

Fungsi jendela langsung VBE anonim yang mengambil input dari jangkauan [A1]dan keluaran ke konsol.

Sejauh yang saya ketahui, ini adalah jawaban VBA pertama yang menggunakan base64kompresi.

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

Catatan: Jawaban ini tergantung pada Microsoft XML, v3.0referensi VBA

Contoh I / O

[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

Tidak Dijelaskan dan Dijelaskan

Bagian utama dari solusi ini menyimpan font besar sebagai basis 64 string. Ini dilakukan dengan terlebih dahulu mengubah font menjadi biner, di mana 1merepresentasikan piksel on dan 0merepresentasikan pixel off. Misalnya, untuk 0, ini direpresentasikan sebagai

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

Dengan pendekatan ini, alfanumerik kemudian dapat direpresentasikan sebagai

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

Segmen ini digabung dan dikonversi menjadi MSXML base 64, rendering

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

Subrutin di bawah ini mengambil ini, kembali mengkonversi ke biner, dan menggunakan ini referensi dari mana untuk membangun string output, baris demi baris, meraih pertama 5 piksel teratas dari setiap karakter, kemudian baris kedua dan seterusnya sampai string dibangun .

Subrutin kemudian beralih ke string output dan menggantikan piksel 'on' dengan karakter dari string input.

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

K (ngn / k) , 230 231 byte

(+1 byte setelah perubahan imp bahasa)

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

Cobalah online!

dimana a string literal dikutip yang mengkode font. K melihat string sebagai urutan byte, sehingga sebuah program yang mengandung literal seperti itu valid, tetapi tidak dapat dijalankan pada TIO, karena bentuk HTML-nya mencoba menafsirkannya sebagai UTF-8 dan mengacaukannya.

Hitungan byte dihitung sebagai:

  • 119 dilaporkan oleh TIO

  • -2 untuk penamaan fungsi f:

  • -1 untuk pengganti a

  • 2 untuk sepasang kutipan ""

  • 113 untuk panjang string literal ayang tidak mengandung karakter apa pun yang membutuhkan pelarian

ngn
sumber