入力をEmbiggenする


19

これは、ほこりで覆われたこのエントリに少し似ていますが、私はそれで私のスピンがそれを十分にユニークにすることを望んでいます。これを投稿することを思いとどまらせるものを見つけることができませんでしたが、そこにはかなりの海があります。

とにかく!チャレンジ:

コードは文字列を受け取ります。これを同じ文字列のASCIIアートスタイルバージョンに変換しますが、キャッチ付きです。

入力変換

  • サポートされる文字は、AZおよび0-9のみです
  • 小文字は大文字に変換されます
  • それ以外は静かに削除されます

キャラクタードローイング

  • 拡大されたフォントの各「ピクセル」は、入力文字列から描画されます
  • n番目のピクセルは、入力文字列のn番目の文字に等しくなります。nが入力文字列の長さよりも大きい場合は、先頭に戻ります
  • 個々の文字は左から右、上から下に描画されます
  • 後続の文字は、最後の文字が途切れたところから「ピクセル文字」インデックスを取得します(たとえば、入力長が10の場合、最初の文字が9ピクセルの場合、2番目の文字の最初のピクセルは10番目の入力文字で描画されます。ピクセルは最初の入力文字で描画されます)
  • 各文字は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
@Shaggyおそらく。しかし同じことで、チャレンジから何かが取り除かれるとは思わない
-Scoots



2
3つの主要なスペースはどうですか?きっとあなたはそれを許さないでしょう!
魔法のタコ

回答:


16

パイソン2413の 411 373 364 352 345バイト

-1バイト、Kevin Cruijssenに感謝します。ジョー・キングの
おかげで-9バイト。Lynnの おかげで-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ビット、および上位25ビットでZエンコードされます。単一の文字は次の順序でエンコードされます。

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最上位ビット)

スペースはゼロでエンコードされ、非スペースは1でエンコードされます。

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

非ゴルフ

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

オンラインでお試しください!


文字は2つのスペースで区切る+' '必要があります+' '。とにかくいい答えなので、私から+1。
ケビンCruijssen

.upper()ただし、どこかが必要です。そうでない場合、内部の文字は小文字になります
ジョーキング

@JoKingあなたは正しい、それを修正しました。
ovs

このエンコードのトリックが大好きです。ベース92を選択したのは、それが印刷可能なアスキーで構成される最大の標準エンコーディングであるためです。もっと高くできたでしょうか?また、私はグーグルで調べましたが、ベース92で詳細な情報を得ることができませんでした-リンクはありますか?
ジョナ

@Jonahベース92エンコードのような標準はありません。そのため、独自のデコードロジックを実装しました。十分な明確な数字がある限り、任意のbaseを使用できます>1
ovs

10

APL(Dyalogユニコード)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トミックVのエクター(文字セット)

¯125+ -125を追加します(符号付き8ビット整数を取得するため)

¯1(219⌶) LZ4解凍

0(220⌶) 36層、5行、5列のブール配列にデシリアライズします

()⌷ 次のインデックスを使用してインデックスを作成します。

⎕A 大文字アルファベット

⎕D, 先頭に追加Dの igitsを

a← 内店舗a(用lphabet)

()∩ 次とそれの交点(無効な入力を削除します):

 stdinからのテキスト入力のプロンプト(コンソール)

  1(819⌶) (大文字に折る819ように見えますがBig、小さなとは対照的に、1はイエスの大きいためです)

i← 内店舗i(のために私は NPUT)

a⍳ɩそれの ndicesa

 囲みます(それぞれが先頭の座標を表すインデックスを付けます)

t← 格納tt extの場合)

, ラベル(平坦化)

r← 保管rr avelledの場合)

+/ それを合計します(つまり、アートワークのペイントに必要な文字数)

i⍴⍨サイクリックrはその長さに入力eshape

r\ それを展開します。0でスペースを挿入し、1で文字を消費します

(…)⍴`は次の形状に変形します。

⍴t テキストの形状

 N行5列5列の配列をアート行のN行5列の行列に分割する

アート行の5行N列の行列に転置します(これにより、文字の対応する行が整列されます)

デフォルトでは、APLはネストされた配列の単純な要素を2つのスペースで区切ります。


まったく違います!各文字の間に2つのスペースが必要です
-Scoots

1
@Scoots OK、修正済み。
アダム

@AdámC とDに
-ngn

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は削除されるため、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)は、これらの新しい文字のうち5つにエンコードされます。

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

5つのリストに:

'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文字が見つかり、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

番号は以下の場合は3036追加される(不足している1私たちは、以前の削除)

n+36*(n<30)

次に、数値はバイナリに戻され、0sと1sはandに変換され.ます。変換中に最後に2つのスペースが追加されます。

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その上!:)
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こそが、ラムダ関数の中にあると述べたのです。同じラムダを2回実行すると、例は機能しませんが、私の場合はこれが重要な違いです。int i;f->{for(i=0;i++<10;)print(i);}(実際には短くはありませんが)許可されます。
ケビンクルーッセン

5

JAPT v2.0a0 -R213 211 210 209 206 193 191 190のバイト

各行の先頭にスペースが含まれます。

uf \ w
£ `...`ò4gXn36)nLõd)¤r0Sr1 @ gT°Ãò5n)ù6Ãym¸

試してみるかすべての文字をテストしてください(余分なバイトは、TIOがJapt v2をまだサポートしていないためです)


説明

ルックアップテーブル

文字列内の4文字のすべてのグループ(...スペースを節約するため、ここには印刷できないものが含まれているため)は、改行を削除して100を基数に変換した各文字(0スペース、1文字)のバイナリ表現です。

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バイト短くなります(trの代わりにgsubを使用するなど)が、アルファベットテーブルを大幅に小さくできない限り、今は興味がありません。


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の大きな整数定数であり、バイナリに変換されて逆になります。次に、5文字の180個の部分文字列にスライスされ、現在の文字と行に関連する部分文字列がループオーバーされます。

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

オンラインでお試しください!


説明

最初にルックアップテーブルが作成されます %lpackedデータを使用してます。このデータは、他のいくつかの答えと同様に、25ビットのバイナリ文字列(113バイトとして保存-炭よりも1バイトだけ多い)としてパックされた各文字の900ビットのバイナリ文字列Aです。

 AAA 
A   A
AAAAA
A   A
A   A

これは、0スペースと1 forA

01110
10001
11111
10001
10001

改行なしの場合:

0111010001111111000110001

ルックアップが初期化されると、各有効チャー上我々反復@F(Perlの使用移入さ-autosplitオプション)は、リストの5つの要素のそれぞれに追加@;のルックアップからアレイ内の行ごとに、すべての置換1とSをuc$F[$i++%@F]れることであり、$i第文字(モジュロ@Fの長さである@F)に変換uPPERのcASE、および全て0での$"スペースにいるデフォルト。の@;各文字に各インデックスが入力されると、@Fsay最後の改行各ラインを印刷します。

:後の文字列にunpackは、\xXX表記法を使用してエスケープされる印刷できないものが含まれます。スコア247の検証


3

SOGL V0.12165の 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バイト

@Scootsのおかげで1バイト節約

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

オンラインでお試しください!

文字コード

文字は逆さまにエンコードされ、ASCII範囲[35..114]を使用して、オフセット4でカスタムbase-80に変換されます。

3579値ながら直接、対応するASCII文字にマッピングされる034が文字にマッピングされている80114。これにより、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のすべての反復は結果の小数部分にのみ影響するため、これは問題ではありません。これは、直後のビット単位の操作では無視されます。

オンラインでお試しください!


RegEx toUpperCaseiフラグに置き換えることはできますか?
シャギー

@Shaggyこれにより、小文字の文字は出力で変更されなくなりますが、これは許可されていないと思います。
アーナルド

ああ、あなたが正しいように見えます、私はそれを見逃していました。独自のソリューションを更新してください!
シャギー

1
[A-Z\d]代わりにマッチングすることでバイトを保存できます[A-Z0-9]か?
スクーツ

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の配列として保存することを選択しました。1つの長い文字列として保存するのは魅力的なアイデアのようでしたが、フォントの8ビットチャンクの多くはエスケープコードが使用する便利なASCII文字ではありませんでしたint配列よりも多くの文字。

編集:結局、文字列エンコーディングに切り替えることで700以下になりました-ここでの他の多くの応答に多少触発され、印刷可能なASCII文字(ほとんど)を使用してbase-92表現をまとめました。表現には、エスケープするために余分なものを必要とするバックスラッシュが含まれていますが、それはフォント内で一度しか発生しません。

それ以外はあまりに派手すぎることはあまりありません-入力(最初のコマンドライン引数から成る)はスタック配列にコピーされ、フォントに含まれていない文字は小文字に置き換えられます大文字バージョン、各完全な文字で始まる「ピクセル」文字が計算されます(使用 __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バイト

範囲から入力を取得[A1]し、コンソールに出力する匿名VBEイミディエイトウィンドウ関数。

私の知る限り、これはbase64圧縮を使用する最初のVBA回答です。

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.0VBAリファレンスに依存します

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

非ゴルフと説明

大きなフォントをベース64文字列として保存するこのソリューションの主要部分。これは、最初にフォントをバイナリに変換することで行われます。ここで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ベース64に変換され、レンダリングされました

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

以下のサブルーチンはこれを取得し、バイナリに逆変換し、これを使用して、文字列が構築されるまで出力文字列を1行ずつ作成するための参照を使用します。 。

次に、サブルーチンは出力文字列を反復処理し、「on」ピクセルを入力文字列の文字に置き換えます。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''
''  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(ngn / 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は文字列をバイトシーケンスと見なします。そのため、このようなリテラルを含むプログラムは有効ですが、HTMLフォームがUTF-8として解釈して台無しにするため、TIOで実行できません。

バイトカウントは次のように計算されます。

  • TIOによる119件の報告

  • -2関数の命名 f:

  • プレースホルダーの場合は-1 a

  • 引用符のペアの場合は2 ""

  • 113 aエスケープが必要な文字を含まない文字列リテラルの長さ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.