ASCIIテーブルをASCIIテーブルとして再作成します


26

コードゴルフをしている間、特定の文字のASCII値が何であるかを知りたいと思うでしょう。印刷可能なすべてのASCII文字すばやく検索するための私のお気に入りのリソースの1つは、ASCIItable.comです。これには、印刷可能なASCII文字とその値だけでなく、印刷できない文字と拡張文字、および16進数、8進数、HTMLの値も表示する、本当に素晴らしい画像があります。

enter image description here

今日の課題は、そのASCIIテーブルをイメージではなくASCIIテーブルとして再作成することです。物事を簡単にするために、制御文字(32未満の文字)は使用せず、10進値と文字のみを表示します。言い換えれば、あなたの課題は、次のテキストを印刷または返すフルプログラムまたは関数を書くことです。

Dec  Chr   | Dec  Chr   | Dec  Chr
----------------------------------
32   Space | 64   @     | 96   `
33   !     | 65   A     | 97   a
34   "     | 66   B     | 98   b
35   #     | 67   C     | 99   c
36   $     | 68   D     | 100  d
37   %     | 69   E     | 101  e
38   &     | 70   F     | 102  f
39   '     | 71   G     | 103  g
40   (     | 72   H     | 104  h
41   )     | 73   I     | 105  i
42   *     | 74   J     | 106  j
43   +     | 75   K     | 107  k
44   ,     | 76   L     | 108  l
45   -     | 77   M     | 109  m
46   .     | 78   N     | 110  n
47   /     | 79   O     | 111  o
48   0     | 80   P     | 112  p
49   1     | 81   Q     | 113  q
50   2     | 82   R     | 114  r
51   3     | 83   S     | 115  s
52   4     | 84   T     | 116  t
53   5     | 85   U     | 117  u
54   6     | 86   V     | 118  v
55   7     | 87   W     | 119  w
56   8     | 88   X     | 120  x
57   9     | 89   Y     | 121  y
58   :     | 90   Z     | 122  z
59   ;     | 91   [     | 123  {
60   <     | 92   \     | 124  |
61   =     | 93   ]     | 125  }
62   >     | 94   ^     | 126  ~
63   ?     | 95   _     | 127  DEL

各行の末尾のスペース、および末尾の改行が許可されます。これはのでチャレンジで入力や外部リソース(ファイルやWebなど)にアクセスすることはできません。目標は、コードを圧縮してこのテキストをできるだけ出力することです。

標準的な抜け穴が適用され、バイト単位の最短回答が優先されます。ハッピーゴルフ!


3
その正確なASCIIテーブルイメージが壁に貼り付いています...とにかく、行のリストを返すことができますか?
FlipTack

2
@fliptackもちろんできます。なぜそのような完全に合理的なものを許可しないのですか?
DJMcMayhem

10
私はこれがだましだとは言いません-もう1つは16進値、印刷できないものの名前を必要とし、異なるテーブル形式です。これは目に見えるASCIIに固執し、すべての印刷できないものの3文字のコードを要求しないことでゴルファーのコードを許可します。
-FlipTack

@FlipTackまだスペースとDELがあります
サイモン

2
@gurkaはい。しかし、もう1つにはすべての制御文字があります。
-FlipTack

回答:


11

Pythonの2、185の 183 175 159バイト

FlipTackのおかげで8バイト節約されました!

Pythonでのゴルフはまだかなり新しいです。

for a in["Dec  Chr   | "*3,"-"*39]+["".join(["%-5d%-6s| "%(l,('Space',chr(l),'DEL')[(l>32)+(l>126)]) for l in(i,32+i,64+i)])for i in range(32,64)]:print a[:-5]

ネストされたリストの内包表記を使用して、テーブル本体を生成します。

ゴルフをしていない:

lines =   \
  ["Dec  Chr   | "*3, "-"*39] +                    # first two lines
    ["".join(                                        # join 3 parts of each line
      ["%-5d%-6s| " % (l, ('Space',chr(l),'DEL')[(l>32)+(l>126)]) 
        for l in (i,32+i,64+i)]                      # generate 3 parts of a line
      )
      for i in range(32,64)]

for line in lines: print line[:-5]

旧試み、185の 183 175バイト

print("Dec  Chr   | "*3)[:-5]+"\n"+"-"*34
a=lambda x:('Space',chr(x),'DEL')[(x>32)+(x>126)]
for l in range(32,64):print("%-5d%-6s| "*3%(l,a(l),l+32,a(l+32),l+64,a(l+64)))[:-5]

ゴルフをしていない:

print ("Dec  Chr   | "*3)[:-5] + "\n" + "-"*34
def a(x):
    return "Space" if x==32 else "DEL" if x==127 else chr(x)
for line in range(32,64):
    print ("%-5d%-6s| "*3 % (line, a(line), line+32, a(line+32), 
      line+64, a(line+64))) [:-5]

`for l in(i、32 + i、64 + i)])`にスペースがあり、1バイト節約するために削除できます。
maxb



5

JavaScript(ES6)、179 173バイト

f=n=>n?(n>>6?' | ':`
`)+n+(99<n?'  ':'   ')+(126<n?'DEL':String.fromCharCode(n)+'    '+f(n>95?n-63:n+32)):`${x='Dec  Chr   '}| ${x}| ${x}
${'-'.repeat(34)}
32   Space`+f(64)

console.log(f())


いい答えだ!`${x='Dec Chr '}| ${x}| ${x}行2の終わりを次のように置き換えることで、もう1バイト節約できます。(x='Dec Chr ')+(' |'+x)*2+`
ルーク

@L.Serné *演算子で文字列を繰り返すECMAScriptのバージョンは知りません。それとも私はあなたの提案を何らかの形で誤解していますか?
アーナウド

おっと、私の悪い。それは、Pythonソリューションとjavascriptを試してみると得られるものです。
ルーク

5

V98、96、94のバイト

i32 | 64 | 9631ñÙl.l.ñÍä«/&   &    
ÎéiD@"
bsDELF 27kdH5lRSpaceÄÒ-Ä3RDec  Chr³ | Î35|D

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

ただ、かろうじて百の下できゅっと。Pythを倒せるかどうかは確認しますが、約束はしません。

hexdumpは次のとおりです。

00000000: 6933 3220 7c20 3634 207c 2039 361b 3331  i32 | 64 | 96.31
00000010: f1d9 016c 2e6c 2ef1 cde4 ab2f 2620 2020  ...l.l...../&   
00000020: 1616 2620 2020 200a cee9 6944 4022 0a62  ..&    ...iD@".b
00000030: 7344 454c 1b46 2016 3237 6b64 4835 6c52  sDEL.F .27kdH5lR
00000040: 5370 6163 651b c4d2 2dc4 3352 4465 6320  Space...-.3RDec 
00000050: 2043 6872 b320 7c20 1bce 3335 7c44        Chr. | ..35|D

そして、これがどのように機能するかです:

i32 | 64 | 96<esc>      " Insert some starting text
31ñ          ñ          " 31 times:
   Ù                    "   Duplicate this line
    <C-a>               "   Increment the first number on this line
         l.             "   Increment the next number
           l.           "   Increment the next number

ここが面白いところです。まず、vim-trickについて説明します。挿入モードでは、特定の文字(すべての印刷可能なASCII文字、上記のほとんどのマップされていない文字0x7f、その他いくつか)が挿入されますが、他の文字には副作用があります。たとえば、0x1b<esc>)は通常モードにエスケープします。0x01<C-a>)は最後に挿入されたテキストなどを再挿入します。時々、これらの文字をそのまま挿入したい場合があります。したがって、リテラルエスケープ文字を挿入するには、と入力する必要があります<C-v><esc>。これは、副作用のあるすべてのキャラクターに有効です。本質的に、<C-v>に、文字列内の特定の文字をエスケープできる文字列リテラルを持つ言語のバックスラッシュに相当します。

<C-v>挿入モードでのもう1つの便利なトリックは、10進数、16進数、8進数、または16進数のUnicodeでcode-pointを使用して文字挿入できることです。特定のASCII値に対応する番号が既にあるので、<C-v>それらの文字の前にaを置き、対応するテキストをvimキーストロークとして実行するだけです。これは、正規表現コマンドと「すべての行で 'x'を実行する」コマンドで実現できます。だから:

Í                       " Substitute globally:
 ä«                     "   One or more digits
   /                    " With:
    &                   "   The matched number + some spaces
        <C-v><C-v>&     "   A ctrl-v character, then the matched number again
                        "   Since ctrl-v is like a backslash, we need two to enter a literal ctrl-v character
Î                       " On every line:
 éi                     "   Insert an 'i'
   D                    "   Delete this line
    @"                  "   Run it as vim keystrokes

この時点で、バッファーは次のようになります

32         | 64   @     | 96   `    
33   !     | 65   A     | 97   a    
34   "     | 66   B     | 98   b    
35   #     | 67   C     | 99   c    
36   $     | 68   D     | 100   d    
37   %     | 69   E     | 101   e    
38   &     | 70   F     | 102   f    
39   '     | 71   G     | 103   g    
40   (     | 72   H     | 104   h    
41   )     | 73   I     | 105   i    
42   *     | 74   J     | 106   j    
43   +     | 75   K     | 107   k    
44   ,     | 76   L     | 108   l    
45   -     | 77   M     | 109   m    
46   .     | 78   N     | 110   n    
47   /     | 79   O     | 111   o    
48   0     | 80   P     | 112   p    
49   1     | 81   Q     | 113   q    
50   2     | 82   R     | 114   r    
51   3     | 83   S     | 115   s    
52   4     | 84   T     | 116   t    
53   5     | 85   U     | 117   u    
54   6     | 86   V     | 118   v    
55   7     | 87   W     | 119   w    
56   8     | 88   X     | 120   x    
57   9     | 89   Y     | 121   y    
58   :     | 90   Z     | 122   z    
59   ;     | 91   [     | 123   {    
60   <     | 92   \     | 124   |    
61   =     | 93   ]     | 125   }    
62   >     | 94   ^     | 126   ~    
63   ?     | 95   _     | 127       

ここで、一般的なクリーンアップが必要です。これは、この回答のほとんどのバイトを占めています

bsDEL<esc>              " Change the literal 0x7f character to "DEL"
          F <C-v>27kd   " Remove a space from the lines that have too many
H5l                     " Move to the first space character
   RSpace<esc>          " And replace it with "Space"
Ä                       " Duplicate this line
 Ò-                     " And replace it with '-'s
   Ä                    " Duplicate this line
    3R                  " And replace it with three copies of the following string:
      Dec  Chr³ | <esc> " 'Dec  Chr   | '

Î35|D                   " Remove all but the first 35 characters of each line

5

F#、222バイト

let c,p=String.concat" | ",printfn"%s"
Seq.replicate 3"Dec  Chr  "|>c|>p
p(String.replicate 34"-")
for i=32 to 63 do[for j in[i;i+32;i+64]->sprintf"%-5d%-5s"j (match j with 32->"Space"|127->"DEL"|_->string(char j))]|>c|>p

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


これの無料版をお願いできますか?私はF#を学ぶのが初めてなので、これをどのように行ったかを適切に理解したいと思います!
Ciaran_McCarthy

1
最初の行は、2つの関数を1文字の名前にエイリアスしています。これを行う["ab"; "cd"] |> c |> pと、「|」で連結されます テーブルを印刷するための基本的なアイデアである「ab | cd」のように、文字とそれらを印刷します。残りはかなり単純で、可能な限り空白を避けます。
-Asik

4

dc、167バイト

[[Space]nq]sp[[DEL]nq]sq[[ ]n]sc[Dec  Chr]dsen[   | ]dsfnlenlfnlen10P34[[-]n1-d0<a]dsax10P0[[32+dndZ2=c[  ]ndd32=pd127=qP[    ]n]dswx[ | ]nlwx[ | ]nlwx10P95-d32>b]dsbx

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

使い方:

[[Space]nq]sp     # p is a macro that prints "Space" and then quits from the call one level up
[[DEL]nq]sq       # q is a macro that prints "DEL" and then quits from the call one level up
[[ ]n]sc          # c is a macro that prints a space
[Dec  Chr]dsen    # Save the string "Dec  Chr" in register e, and print it.
[   | ]dsfn       # Save the string "   | " in register f, and print it.
len               # Print "Dec  Chr" again.
lfn               # Print "   | " again.
len               # Print "Dec  Chr" again.
10P               # Print a newline.
34                # Push 34 on the stack.

[[-]n1-d0<a]dsa   # a is a macro that repeatedly prints "-" and decrements the top of the stack, while the top of the stack is positive.

x10P              # Execute macro a, followed by a newline. (This prints the line of hyphens.)

0                 # Push 0 on the stack.

[                 # Starting a large macro (which will be stored in register b) for printing the table row by row.

[32+dndZ2=c[  ]ndd32=pd127=qP[    ]n]dsw

                  # w is a macro which:
                        (1) adds 32 to the top of the stack;
                        (2) prints it as a number;
                        (3) uses Z to compute the number of characters the number required to print that number;
                        (4) if it required 2 characters to print the number, calls the macro c to print an extra space
                        (5) prints the string "Space" (for ASCII code 32) or the string "DEL" (for ASCII code 127) or the appropriate character, followed by the right number of spaces

x                 # Execute macro w to print an entry in column 1.
[ | ]n            # Print a column divider.
lwx               # Execute macro w to print an entry in column 2 (ASCII code 32 higher than the previous entry).
[ | ]n            # Print a column divider.
lwx               # Execute macro w to print an entry in column 3 (ASCII code 32 higher than the previous entry).

10P               # Print a newline.
95-               # Subtract 95 to adjust to go to the beginning of the next line.

d32>b             # If the top of stack is <= 32, execute macro b again, effectively looping to print all the rows of the table.

]dsb              # End the definition of the large macro, and store it in register b.

x                 # Execute the macro that's in b (with 0 at the top of the stack initially).

4

Perl、120バイト

$,="| ";say+("Dec  Chr   ")x3;say"-"x32;say map{sprintf"%-5s%-6s",$_,$_-32?$_-127?chr:DEL:Space}$_,$_+32,$_+64for 32..63

で実行 -Eフラグ:

perl -E '$,="| ";say+("Dec  Chr   ")x3;say"-"x32;say map{sprintf"%-5s%-6s",$_,$_-32?$_-127?chr:DEL:Space}$_,$_+32,$_+64for 32..63'

-GBのおかげで-2バイト。


私は少しのPerlを理解していれば、多分あなたは「%-5S」ではなく「%の-3S」のを使用して2つのスペースを削減することができます(ちなみに、それは私がルビーに何をすべきかだ)
GB

3

C、179バイト

i;f(){for(;i++<37;)printf(i<4?"Dec  Chr%s":"-",i<3?"   | ":"\n");printf("\n32   Space | ");for(i=64;i<127;i+=i>95?-63:32)printf("%-5d%-6c%s",i,i,i>95?"\n":"| ");puts("127  DEL");}

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

セミゴルフ:

i;
f() {
  for(;i++<37;) printf(i<4?"Dec  Chr%s":"-",i<3?"   | ":"\n");

  printf("\n32   Space | ");
  for(i=64;i<127;i+=i>95?-63:32) printf("%-5d%-6c%s",i,i,i>95?"\n":"| ");
  puts("127  DEL");
}

3

ルビー、124バイト

 puts [["Dec  Chr   "]*3*"| ",?-*34,(0..31).map{|d|(1..3).map{|x|"%-5s%-6s"%[y=x*32+d,y<33?"Space":y>126?"DEL":y.chr]}*"| "}]

3

V151 150 148 136 135 130 129 125バイト

@ nmjcman101のおかげ<C-v>g<C-a>で、代わりに数字を使用して12バイト節約line('.')

@DJMcMayhemを使用してÇÓ/d、先頭のスペースを含む行を使用して、または使用して2バイト節約を削除したり、余分なスペースを削除したり並べ替えたり、

この回答は、@ nmjcman101のV 回答(を使用:set ve=all)と競合しています。しかし、今、それらを削除してA ^[いくつかのバイトを保存する方法を見つけましたが、バイトカウントは偶数です

iSpace 
¬!~Ó./&ò
iDELí^/31   
HlgGo| 63ÙkGld/Sp
$p/`
G$d/@
$p/64
G$d/S
$pÇÓ/d
/d
hdê/32
O34é-O!| !| !Ó!/Dec  Chr   

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

Hexdump:

00000000: 6953 7061 6365 200a 1bac 217e d32e 2f26  iSpace ...!~../&
00000010: f20a 6944 454c 1bed 5e2f 3331 2020 200a  ..iDEL..^/31   .
00000020: 1648 6c67 0147 6f7c 201b 3633 d96b 1647  .Hlg.Go| .63.k.G
00000030: 6c64 2f53 700a 2470 2f60 0a16 4724 642f  ld/Sp.$p/`..G$d/
00000040: 400a 2470 2f36 340a 1647 2464 2f53 0a24  @.$p/64..G$d/S.$
00000050: 70c7 d32f 640a 2f64 0a68 64ea 2f33 320a  p../d./d.hd./32.
00000060: 4f1b 3334 e92d 4f21 7c20 217c 2021 1bd3  O.34.-O!| !| !..
00000070: 212f 4465 6320 2043 6872 2020 20         !/Dec  Chr 

説明(未完成および古い)

ここでの戦略は、行番号を使用してASCIIコードポイントを生成することです。

注:^[され0x1b^VありますC-v

まず、すべての文字を生成します。

iSpace             " insert Space
^[¬!~              " insert every character between ! and ~

現在のバッファは次のようになります

Space
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

これらの文字の間に改行を挿入します

     Ó./&ò         " insert a newline before every character (:s/./&\r/g)

32 SPACE ... 127 DELコードの一部の代替品を次に示します。オンラインで試してみてください! たくさんの数字をハイライトできる、そのきちんとしたものを使用して、それg^Aを増加するシーケンスにします(Vim 8の新機能?)
nmjcman101

@ nmjmcman101ええ、7.4.somethingで追加されましたが、公式に8で追加されました。さらに良いのはnormコマンドをオンラインで試してみることです!
DJMcMayhem

いずれにせよ、一度できるようになったら:set ve=all、カーソルがテキストのない場所に移動し、パイプを簡単に挿入し、A <esc>どこにでも散らさずに必要な場所にコピー/貼り付けできます
nmjcman101

@ nmjcman101 g^Aおかげで、12バイト節約できました:)
Kritixi Lithos

@DJMcMayhem何らかの理由で、ノルムを使用してから数値をインクリメントしても機能しない
KritixiのLithos

3

V130 120 99バイト

サブ100クラブ。これが:se ve=all最善の方法だとはもう思いません。それは余分です...を書くためだけに11バイト|!しかし、それは私が持っているものです。

私は、これを@KritixiLuthosの回答とほぼ競合して投稿:se ve=allし、いくつかA <esc>のを回避しています。私はどちらの方法もまだ良いとは確信していませんので、これが両方のパーティーでいくつかのゴルフを刺激し、どの方法がケーキを取るかを見ることができれば幸いです。

また、@ DJMcMayhemが両方のパンツを蹴るのを半分期待しています

iSpace
¬!~Ó./&ò
iDELí^/31   
Hlg:se ve=all
12|êr|2ñ031j$x)PñHd)ÄÒ-Ä3RDec  Chr³ | /d
hdêÎ35|D

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

好奇心for盛な人のためのHexdump(興味があれば、これをvimスタイルの隠し文字ブロックに変更します)

00000000: 6953 7061 6365 0a1b ac21 7ed3 2e2f 26f2  iSpace...!~../&.
00000010: 0a69 4445 4c1b ed5e 2f33 3120 2020 0a16  .iDEL..^/31   ..
00000020: 486c 6701 3a73 6520 7665 3d61 6c6c 0a31  Hlg.:se ve=all.1
00000030: 327c 16ea 727c 32f1 3016 3331 6a24 7829  2|..r|2.0.31j$x)
00000040: 50f1 4864 29c4 d22d c433 5244 6563 2020  P.Hd)..-.3RDec  
00000050: 4368 72b3 207c 201b 2f64 0a68 64ea ce33  Chr. | ./d.hd..3
00000060: 357c 44                                  5|D

1
グローバルコマンドはかなり短縮できます。1つは、をdd実行するだけで暗黙的ですd。また、正規表現<M-s>と常に同等であることができ\sます。したがって、次のように短縮できますç^ó*/d。しかし、逆のグローバルコマンドを切り替えると、非空白文字に一致しない:g!すべての行を検索できます。相当するÇÓ/d:g!/\S/normal dd
DJMcMayhem

3

AWK、200バイト

BEGIN{b="-----------";a="Dec  Chr   ";print a"|",a"|",a"\n-"b b b;for(a=31;a++<63;){printf"%-5d%-6s| %-5d%-6c| %-5d%-5s\n",a,a<33?"Space":sprintf("%c",a),a+32,a+32,a+64,a<63?sprintf("%c",a+64):"DEL"}}

フォーマット済み:

BEGIN {
  b="-----------"
  a="Dec  Chr   "
  print a"|",a"|",a"\n-"b b b
  for(a=31;a++<63;) {
    printf "%-5d%-6s| %-5d%-6c| %-5d%-5s\n",
      a,    a<33 ? "Space" : sprintf("%c", a),
      a+32, a+32,
      a+64, a<63 ? sprintf("%c", a+64) : "DEL"
  }
}

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


2

C 188バイト

f(){i=31;printf("Dec Chr | Dec Chr | Dec Chr");printf("\n--------------------------");for(;i<63;i++)printf("\n%d%4c  | %d%4c  | %d%4c",(i+1),(i+1),(i+33),(i+33),(i+65),(i+65));puts("DEL");

通常、次のようになります。

f()
{
    int  i=31;
    printf("Dec Chr | Dec Chr | Dec Chr");
    printf("\n--------------------------"); 
    for(;i<63;i++)  
      printf("\n%d%4c  | %d%4c  | %d%4c", (i+1),(i+1),(i+33),(i+33),  (i+65),(i+65));
    puts("DEL");
}

2

C(249バイト)

明確にするために改行が追加されました。

#define L(s,e)for(i=s;i<e;++i)
#define P printf
main(i){L(0,3)P("Dec  Chr  %s",i<2?" | ":"\n");
L(0,34)P("-");P("\n");L(32,64){P("%-5d", i);
i==32?P("Space"):P("%-5c",i);
P(" | %-5d%-5c | %-5d ",i+32,i+32,i+64);
i==63?P("DEL"):P("%-5c",i+64);P("\n");}}

Pbe を作成することprintf(で、次のように間違いなくいくつかのバイトを節約できます。repl.it
Zacharý17年

そして、4行目のスペースを削除します。
ザカリー

2

Java(登録商標)、434の 422 321バイト

class A{public static void main(String[]a){
    int k=1,r,s=32;
    for(;k<4;k++)
        o("Dec   Chr  ",k);
    for(;k<37;k++)                                                                              
        o("-",k==36?3:4);
    for(k=r=s;!(k==64&&r==-63);r=k>95?-63:s,k+=r)
        o(k+"   "+((k>99)?"":" ")+(k==s?"Space":k==127?"DEL  ":((char)k+"    ")),k/s);
    }
    static void o(String s,int j){
        System.out.print(s+(j==4?"":j==3?"\n":"|"));
    }
}

クラスとメインメソッドのオーバーヘッドがあるため、Javaはおそらくこれに最適な言語ではありません...

静的宣言を使用してmainメソッドを削除し、バイトカウントをさらに減らすことができます。

class A{
    static{...}

しかし、これはエラーになります(そうでなければ正常に実行された後):

Exception in thread "main" java.lang.NoSuchMethodException: A.main([Ljava.lang.String;)
    at java.lang.Class.getMethod(Class.java:1786)
    ...

バイトカウントには、改行またはインデントが含まれます。


私はあなたが後にスペースを必要とは思わないvoid main(){、との間でもないwhile(s.length()<5)s+=" "。(バイトカウントでカウントしない限り)。そして、あなたは変更することで、数バイトを保存することができますd="Dec",c="Chr"d=p("Dec"),c=p("Chr")、あなたの呼び出しを変更することp(d)p(c)するdc
ザカリー

434は不要な空白をすべて削除していました。あなたの提案は425にそれをもたらします。ありがとう!
-xirt

434-

できた 注:プログラムは大幅に変更されたため(さらに削減されたため)、上記のコメントは関係ない可能性があります
-xirt

2

Tcl、233バイト

lassign {"Dec  Chr" "   | " 31} h S i
set H $h$S$h$S$h\n[string repe - 34]
proc p x {format %-5d%c $x $x}
time {set H "$H
[p [incr i]]  $S[p [expr $i+32]]  $S[p [expr $i+64]]"} 32
puts [regsub {\ {8}} [regsub \177 $H DEL] "   Space"]

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


これを実行すると32 、たとえば(の代わりに '' Space)と33!(との間に スペースがありません)が表示されます。33!
-NoOneIsHere

@SeeOneRhino:あなたは明らかにコードに注意を払っていません。ここに貼り付けた後にリンクのコードを変更し、さらにゴルフをしようと試みましたが、まだ成功しませんでした。私は今ページに行って、失敗した試みをコメントし、ここからコードを貼り直しました。今そこに行くと、コードがまったく同じであり、正しく印刷されるのがわかります!
セルジオ

申し訳ありませんが、リンクの編集が表示されませんでした。コードはここに投稿したものと同じであると想定しました。
-NoOneIsHere

問題ありません、それは私のせい
でした-sergiol

@SeeOneRhino:私はそれを達成しました!私は自分でゴルフをしました!
-sergiol

2

R235228221212バイト

y=apply(rbind(rep("Dec  Chr  ",3),1,matrix(sapply(1:96,function(i)paste(i+31,rep(" ",i<69),"if"(i<2,"Space","if"(i>95,"DEL",intToUtf8(c(i+31,rep(32,4))))))),nrow=32)),1,paste,collapse=" | ")
y[2]=strrep("-",34)
y

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

私は、200バイトの下に入ることは本当に懸命に試みたが、これらpastecollapse私を殺しています。行のリストを返します。


1

JavaScript(ES6)、258バイト

a="Dec  Chr   | ".repeat(2)+"Dec  Chr\n"+"-".repeat(34);for(b=32;64>b;b++)a+="\n"+b+"   "+(32==b?"Space  ":String.fromCharCode(b)+"      ")+"| "+(b+32)+"   "+String.fromCharCode(b+32)+"     | "+(b+64)+(35<b?"  ":"   ")+(63==b?"DEL":String.fromCharCode(b+64))

console.log(a)

1

パワーシェル、159バイト

,'Dec  Chr'*3-join'   | '
'-'*34
32..63|%{($_,($_+32),($_+64)|%{"$_".PadRight(5)+"$(([char]$_,('Space','DEL')[$_-ne32])[$_-in32,127])".padRight(5)})-join' | '}

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

最初の2行は、リテラル文字列を作成し、それらをパイプラインに残すだけです。最初はカンマ演算子を使用します,を使用して配列を作成し、次に-joinその配列を一緒に使用してヘッダーを作成します。2番目は、単なる文字列の乗算です。

第三のラインは、上ループ32..63と、各反復の3つの値を送信し$_($_+32)および($_+64)内側のループに入ります。内側のループはPadRight値を処理します(適切なスペースを追加して文字に埋め込み5ます)。次に+、ネストされた疑似三項の結果と連結された文字列( )[ ]です。擬似3項charは、その数の表現を選択するか、そうでSpaceないDEL場合、または適切な値である場合を選択します。繰り返しますが、私たちはPadRight適切なキャラクターです。

これらの3つの文字列は、(例えば、32 Space64 @96 `)括弧内にカプセル化され、-join単一の文字列に、列マーカーと編。これらの32個の文字列はそれぞれ、パイプラインに残ります。実行の最後Write-Outputに、パイプライン上の要素間に暗黙的な改行が挿入されるため、無料で取得できます。


1

Perl、 165 155バイト

$s='Dec  Chr   ';$_=join"\n",("$s| $s| $s","-"x34,map{join"| ",map{sprintf'%1$-5d%1$-6c',$_}($_,$_+32,$_+64)}32..63);s/ {8}/   Space/;s/\x7f.*/DEL\n/;print

1

Python 2、1564 218バイト

私の最初のゴルフ、明らかな間違いでごめんなさい

print("Dec  Chr   | "*3)[:-2]+"\n"+"-"*34+"\n32   Space | 64   @     | 96   `"
for n in range(33,63):print"| ".join([str(n+x).ljust(5)+chr(n+x).ljust(6)for x in [0,32,64]])
print"63   ?     | 95   _     | 127  DEL"

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

ご参考までに、最初のバージョンはbase64でエンコードされた文字列でした。


@FlipTackそれを実際のソリューションに変更
-sagiksp

の不要な空白ljust(6) for
イッツィー

別のx in [。また、IIRC内の角括弧joinは削除できます。
-Yytsi

1

05AB1E82 76バイト

žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)øvyð2×ý})3äøvy… | ©ý}®”†…  Chr  ÿ”3ר¨'-34×.Á.Á»

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

まだゴルフですが、これは大いに改善できます。


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø 同等のテキストで埋められた数字をプッシュします。

[['32 ', 'Space'], ['33 ', '!    '], ['34 ', '"    '], ['35 ', '#    '], ['36 ', '$    '], ['37 ', '%    '], ['38 ', '&    '], ['39 ', "'    "], ['40 ', '(    '], ['41 ', ')    '], ['42 ', '*    '], ['43 ', '+    '], ['44 ', ',    '], ['45 ', '-    '], ['46 ', '.    '], ['47 ', '/    '], ['48 ', '0    '], ['49 ', '1    '], ['50 ', '2    '], ['51 ', '3    '], ['52 ', '4    '], ['53 ', '5    '], ['54 ', '6    '], ['55 ', '7    '], ['56 ', '8    '], ['57 ', '9    '], ['58 ', ':    '], ['59 ', ';    '], ['60 ', '<    '], ['61 ', '=    '], ['62 ', '>    '], ['63 ', '?    '], ['64 ', '@    '], ['65 ', 'A    '], ['66 ', 'B    '], ['67 ', 'C    '], ['68 ', 'D    '], ['69 ', 'E    '], ['70 ', 'F    '], ['71 ', 'G    '], ['72 ', 'H    '], ['73 ', 'I    '], ['74 ', 'J    '], ['75 ', 'K    '], ['76 ', 'L    '], ['77 ', 'M    '], ['78 ', 'N    '], ['79 ', 'O    '], ['80 ', 'P    '], ['81 ', 'Q    '], ['82 ', 'R    '], ['83 ', 'S    '], ['84 ', 'T    '], ['85 ', 'U    '], ['86 ', 'V    '], ['87 ', 'W    '], ['88 ', 'X    '], ['89 ', 'Y    '], ['90 ', 'Z    '], ['91 ', '[    '], ['92 ', '\\    '], ['93 ', ']    '], ['94 ', '^    '], ['95 ', '_    '], ['96 ', '`    '], ['97 ', 'a    '], ['98 ', 'b    '], ['99 ', 'c    '], ['100', 'd    '], ['101', 'e    '], ['102', 'f    '], ['103', 'g    '], ['104', 'h    '], ['105', 'i    '], ['106', 'j    '], ['107', 'k    '], ['108', 'l    '], ['109', 'm    '], ['110', 'n    '], ['111', 'o    '], ['112', 'p    '], ['113', 'q    '], ['114', 'r    '], ['115', 's    '], ['116', 't    '], ['117', 'u    '], ['118', 'v    '], ['119', 'w    '], ['120', 'x    '], ['121', 'y    '], ['122', 'z    '], ['123', '{    '], ['124', '|    '], ['125', '}    '], ['126', '~    '], ['127', 'DEL  ']]

vyð2×ý})3äøvy… | ©ý} それらをテーブルに結合します:

['32   Space | 64   @     | 96   `    ', '33   !     | 65   A     | 97   a    ', '34   "     | 66   B     | 98   b    ', '35   #     | 67   C     | 99   c    ', '36   $     | 68   D     | 100  d    ', '37   %     | 69   E     | 101  e    ', '38   &     | 70   F     | 102  f    ', "39   '     | 71   G     | 103  g    ", '40   (     | 72   H     | 104  h    ', '41   )     | 73   I     | 105  i    ', '42   *     | 74   J     | 106  j    ', '43   +     | 75   K     | 107  k    ', '44   ,     | 76   L     | 108  l    ', '45   -     | 77   M     | 109  m    ', '46   .     | 78   N     | 110  n    ', '47   /     | 79   O     | 111  o    ', '48   0     | 80   P     | 112  p    ', '49   1     | 81   Q     | 113  q    ', '50   2     | 82   R     | 114  r    ', '51   3     | 83   S     | 115  s    ', '52   4     | 84   T     | 116  t    ', '53   5     | 85   U     | 117  u    ', '54   6     | 86   V     | 118  v    ', '55   7     | 87   W     | 119  w    ', '56   8     | 88   X     | 120  x    ', '57   9     | 89   Y     | 121  y    ', '58   :     | 90   Z     | 122  z    ', '59   ;     | 91   [     | 123  {    ', '60   <     | 92   \\     | 124  |    ', '61   =     | 93   ]     | 125  }    ', '62   >     | 94   ^     | 126  ~    ', '63   ?     | 95   _     | 127  DEL  ']

®”†… Chr ÿ”3ר¨'-34×.Á.Á» テーブルのヘッダー部分を処理します:

Dec  Chr   | Dec  Chr   | Dec  Chr   
----------------------------------
32   Space | 64   @     | 96   `    
33   !     | 65   A     | 97   a    
34   "     | 66   B     | 98   b    
35   #     | 67   C     | 99   c    
36   $     | 68   D     | 100  d    
37   %     | 69   E     | 101  e    
38   &     | 70   F     | 102  f    
39   '     | 71   G     | 103  g    
40   (     | 72   H     | 104  h    
41   )     | 73   I     | 105  i    
42   *     | 74   J     | 106  j    
43   +     | 75   K     | 107  k    
44   ,     | 76   L     | 108  l    
45   -     | 77   M     | 109  m    
46   .     | 78   N     | 110  n    
47   /     | 79   O     | 111  o    
48   0     | 80   P     | 112  p    
49   1     | 81   Q     | 113  q    
50   2     | 82   R     | 114  r    
51   3     | 83   S     | 115  s    
52   4     | 84   T     | 116  t    
53   5     | 85   U     | 117  u    
54   6     | 86   V     | 118  v    
55   7     | 87   W     | 119  w    
56   8     | 88   X     | 120  x    
57   9     | 89   Y     | 121  y    
58   :     | 90   Z     | 122  z    
59   ;     | 91   [     | 123  {    
60   <     | 92   \     | 124  |    
61   =     | 93   ]     | 125  }    
62   >     | 94   ^     | 126  ~    
63   ?     | 95   _     | 127  DEL  

1

PHP、163 149 147バイト

<?=($p=str_pad)(D,31,"ec Chr   | D"),$p("
",32,"-");whhile($i<96)printf("%s%-4d%-6s",$i%3?"| ":"
",$o=$i%3*32+32+$i/3,$i++?$i<96?chr($o):DEL:Space);

壊す

                        # print header
<?=($p=str_pad)(D,31,"ec Chr   | D"),$p("\n",32,"-");
while($i<96)            # loop $i from 0 to 96
    printf("%s%-4d%-6s",    # print formatted:
                            # string, 4 space decimal leftbound, 6 space string leftbound
        $i%3?"| ":"\n",                 # linebreak for 1st column, pipe+space else
        $o=$i%3*32+32+$i/3,             # ($i mapped to) ASCII value
        $i++?$i<96?chr($o):DEL:Space    # character
    );

使用すること%-Nは、右側の数字と文字が保存するバイトに値します。


私の意見では、同じバイト数で良く見えますオンラインで試してみてください!
ヨルクヒュルサーマン


0

T-SQL、242バイト

DECLARE @ INT=32PRINT'Dec  Chr   | Dec  Chr   | Dec  Chr
'+REPLICATE('-',34)L:PRINT CONCAT(@,'   ',IIF(@=32,'Space | ',CHAR(@)+'     | '),@+32,'   ',CHAR(@+32),'     | ',@+64,SPACE(5-LEN(@+64)),IIF(@=63,'DEL',CHAR(@+64)))SET @+=1IF @<64GOTO L

フォーマット済み:

DECLARE @ INT=32
PRINT'Dec  Chr   | Dec  Chr   | Dec  Chr
' + REPLICATE('-',34)
L:
    PRINT CONCAT(@,'   ',IIF(@=32,'Space | ',CHAR(@)+'     | ')
                ,@+32,'   ',CHAR(@+32),'     | ',
                 @+64,SPACE(5-LEN(@+64)),IIF(@=63,'DEL',CHAR(@+64)))
    SET @+=1
IF @<64 GOTO L

さまざまな一般的な文字列を他の変数に置き換えるなど、いくつかのバリエーションを試しましたが、これは私が見つけた最短バージョンです。



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