Buat kembali tabel ASCII sebagai tabel ASCII


26

Seringkali saat saya bermain golf, saya ingin tahu apa nilai ASCII dari karakter tertentu. Salah satu sumber favorit saya untuk mencari semua karakter ASCII yang dapat dicetak dengan cepat adalah ASCIItable.com . Ini memiliki gambar yang sangat bagus yang tidak hanya memperlihatkan karakter ASCII yang dapat dicetak beserta nilainya, tetapi juga karakter yang tidak dapat dicetak dan diperluas, dan nilai dalam heksadesimal, oktal, dan HTML:

masukkan deskripsi gambar di sini

Tantangan hari ini adalah membuat ulang tabel ASCII itu sebagai tabel ASCII dan bukannya gambar. Agar lebih sederhana, kami tidak akan menggunakan karakter kontrol (karakter di bawah 32) dan kami hanya akan menampilkan nilai desimal dan karakter. Dengan kata lain, tantangan Anda adalah menulis program penuh atau fungsi yang mencetak atau mengembalikan teks berikut:

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

Membuntuti spasi pada setiap baris, dan membuntuti baris baru diizinkan. Karena ini adalah tantangan , kiriman Anda mungkin tidak menerima input apa pun, atau mengakses sumber daya eksternal apa pun (seperti file atau web), dan tujuan Anda adalah mengompres kode untuk menghasilkan teks ini sebanyak mungkin.

Celah standar berlaku, dan jawaban tersingkat dalam byte menang. Selamat bermain golf!


3
Saya memiliki gambar tabel ASCII yang tepat tersangkut di dinding saya ... Lagi pula, bisakah daftar garis dikembalikan?
FlipTack

2
@ Fliptack Tentu saja Anda bisa. Kenapa aku tidak membiarkan sesuatu yang masuk akal seperti itu?
DJMcMayhem

10
Saya tidak akan mengatakan ini adalah sebuah penipuan - yang lain membutuhkan nilai hex, nama-nama yang tidak patut, dan merupakan format tabel yang berbeda. Ini menempel pada ASCII yang terlihat dan memungkinkan kode golfier dengan tidak meminta kode 3 huruf dari semua yang tidak dapat dicetak.
FlipTack

@FlipTack Masih memiliki Space dan DEL
simon

2
@ Gerka ya, tapi yang lain memiliki setiap karakter kontrol tunggal.
FlipTack

Jawaban:


11

Python 2, 185 183 175 159 byte

Disimpan 8 byte berkat FlipTack!

Masih cukup baru untuk bermain golf di 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]

Menggunakan pemahaman daftar bersarang untuk menghasilkan tubuh tabel.

Tidak Disatukan:

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]

Usaha lama, 185 183 175 byte

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]

Tidak Disatukan:

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]

Saya melihat spasi di `for l in (i, 32 + i, 64 + i)])`, dapat dihapus untuk menghemat satu byte.
Maks.

6

Befunge, 176 172 byte

<v"Dec  Chr   "0
^>:#,_$1+:2`#v_" |",,
\:#->#1_55+,v>55+,"!-":>,#:
+2*,:"_"`#@_v>1+:8-#v_$1+:3%!:7g,!29+*5
*84+1%3\/3::<^,gg00:<`"c"p00+5+`"~"\`*84::p62:.:+*
  Space

| DEL

Cobalah online!



5

JavaScript (ES6), 179 173 byte

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


Jawaban bagus! Anda dapat menyimpan satu byte lagi dengan mengganti `${x='Dec Chr '}| ${x}| ${x}di akhir baris 2 dengan(x='Dec Chr ')+(' |'+x)*2+`
Luke

@ L.Serné Saya tidak tahu versi ECMAScript yang akan mengulangi string dengan *operator. Atau apakah saya entah bagaimana salah memahami saran Anda?
Arnauld

Ups, salahku. Itulah yang Anda dapatkan karena mencoba solusi python golf dan kemudian javascript.
Luke

5

V , 98, 96 , 94 byte

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

Cobalah online!

Hanya nyaris mencicit di bawah seratus. Aku akan melihat apakah aku bisa mengalahkan Pyth, tapi aku tidak akan membuat janji.

Ini 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

Dan inilah cara kerjanya:

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

Di sinilah tempatnya menarik. Pertama, izinkan saya menjelaskan vim-trick. Saat dalam mode penyisipan, karakter-karakter tertentu dimasukkan (semua karakter ASCII yang dapat dicetak, sebagian besar karakter yang belum dipetakan di atas 0x7f, dan beberapa karakter lainnya), tetapi karakter lain memiliki efek samping. Misalnya, 0x1b( <esc>) akan keluar ke mode normal. 0x01( <C-a>) akan memasukkan kembali teks yang disisipkan terakhir, dll. Terkadang, kami ingin memasukkan karakter ini secara harfiah. Jadi untuk memasukkan karakter escape literal, Anda harus mengetik <C-v><esc>. Ini berfungsi untuk semua karakter yang memiliki efek samping. Jadi pada dasarnya, <C-v>adalah setara dengan garis miring terbalik dalam bahasa dengan string literal yang memungkinkan Anda untuk melarikan diri karakter tertentu dalam string.

Trik lain yang berguna dengan <C-v>dalam mode insert, adalah dapat digunakan untuk menyisipkan karakter berdasarkan titik kode , baik dalam Desimal, Heksadesimal, Oktal, atau Unicode Heksadesimal. Karena kita sudah memiliki angka yang sesuai dengan nilai ASCII tertentu, kita hanya perlu meletakkan <C-v>sebelum karakter tersebut, dan menjalankan teks yang sesuai sebagai penekanan tombol vim. Ini dapat dicapai dengan perintah regex, dan perintah "Do 'x' pada setiap baris". Jadi kami:

Í                       " 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

Pada titik ini, buffer terlihat seperti ini

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       

Sekarang kita hanya perlu pembersihan umum, yang merupakan sebagian besar byte dalam jawaban ini

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 byte

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

Cobalah online!


Bisakah saya meminta versi yang tidak disunat ini? Saya benar-benar baru belajar F #, dan saya ingin memahami dengan baik bagaimana Anda melakukan ini!
Ciaran_McCarthy

1
Baris pertama alias dua fungsi untuk nama karakter tunggal. Sekarang jika Anda melakukannya ["ab"; "cd"] |> c |> p, gabungkan dengan "|" karakter dan mencetaknya, seperti "ab | cd" yang merupakan ide dasar untuk mencetak tabel. Sisanya cukup mudah, hanya menghindari ruang putih sedapat mungkin.
Asik

4

dc , 167 byte

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

Cobalah online!

Bagaimana itu bekerja:

[[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 byte

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

Jalankan dengan -Ebendera:

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

-2 byte terima kasih kepada @GB .


Jika saya mengerti sedikit Perl, mungkin Anda dapat memotong 2 spasi dengan menggunakan "% -5s" bukannya "% -3s" (kebetulan, itulah yang saya lakukan di ruby)
GB

3

C, 179 byte

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

Cobalah online!

Semi-ungolfed:

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

Ruby, 124 byte

 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

V , 151 150 148 136 135 130 129 125 byte

12 byte disimpan berkat @ nmjcman101 untuk penggunaan <C-v>g<C-a>angka bukanline('.')

2 byte disimpan berkat @DJMcMayhem untuk menghapus garis dengan spasi terdepan menggunakan ÇÓ/ddan dengan menggunakan untuk menghapus spasi ekstra dan mengatur ulang barang-barang

Jawaban ini bertentangan dengan jawaban V @ nmjcman101 (yang menggunakan :set ve=all). Tapi sekarang, saya menemukan cara untuk menghapusnya A ^[dan menyimpan beberapa byte dan kami bahkan pada bytecount

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

Cobalah online!

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 

Penjelasan (tidak lengkap dan ketinggalan jaman)

Strategi di sini adalah saya menggunakan nomor baris untuk menghasilkan poin kode ASCII.

Catatan: ^[adalah 0x1b, ^VadalahC-v

Pertama kita menghasilkan semua karakter.

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

Buffer saat ini terlihat seperti

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

Sekarang kami menyisipkan baris baru di antara karakter-karakter ini

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

Berikut ini adalah pengganti untuk 32 SPACE ... 127 DELbagian kode Anda: Coba online! Ini menggunakan hal yang rapi di mana Anda dapat menyorot banyak angka, dan kemudian g^Amembuatnya menjadi urutan yang meningkat (baru dalam Vim 8?)
nmjcman101

@ nmjmcman101 Ya, itu ditambahkan pada 7.4.something, tetapi secara resmi ditambahkan pada 8. Bahkan lebih baik menggunakan perintah norma Coba online!
DJMcMayhem

Apa pun itu, begitu Anda mendapatkan bahwa Anda dapat melakukan :set ve=alldan kemudian kursor akan pindah ke tempat-tempat yang tidak ada teks, memungkinkan Anda memasukkan pipa lebih mudah dan menyalin / menempel di tempat-tempat yang Anda butuhkan tanpa memerciki di A <esc>mana
nmjcman101

@ nmjcman101 g^ATerima kasih, itu menyelamatkan saya 12 byte :)
Kritixi Lithos

@DJMcMayhem Untuk beberapa alasan, menggunakan norma dan kemudian menambah angka tidak bekerja
Kritixi Lithos

3

V , 130 120 99 byte

Klub Sub 100. Saya tidak lagi yakin itu :se ve=alladalah cara terbaik untuk melakukan ini. Ini tambahan ... 11 byte hanya untuk menulis |'s! Tapi itulah yang saya miliki.

Saya memposting ini hampir dalam persaingan dengan @KritixiLuthos menggunakan jawaban :se ve=alluntuk menghindari beberapa A <esc>. Saya tidak yakin bahwa salah satu metode lebih baik, jadi mudah-mudahan ini dapat menginspirasi beberapa golf di kedua belah pihak dan melihat metode mana yang mengambil kue.

Saya juga setengah berharap @DJMcMayhem menendang kedua celana kami

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

Cobalah online!

Hexdump untuk yang penasaran (jika ada minat saya hanya akan mengubahnya ke blok karakter tersembunyi gaya-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
Perintah global dapat disingkat menjadi cukup tetapi. Untuk satu, dditu implisit jika Anda lakukan d. Anda juga dapat melakukan <M-s>yang selalu sama dengan \sdi regex. Jadi Anda bisa memperpendek ke: ç^ó*/d. Tetapi jika Anda mengganti perintah global untuk invers :g!Anda bisa mencari setiap baris yang tidak cocok dengan karakter yang bukan spasi. ÇÓ/dyang setara dengan:g!/\S/normal dd
DJMcMayhem

3

AWK , 200 byte

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

Diformat:

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

Cobalah online!


2

C 188 Bytes

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");

Biasanya terlihat seperti ini:

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

Baris baru ditambahkan untuk kejelasan.

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

Anda pasti dapat menyimpan beberapa byte dengan pembuatan Pakan printf(, seperti yang ditunjukkan di sini: repl.it/JBRD
Zachary

Dan dengan menghapus ruang di baris keempat Anda.
Zacharý

2

Java, 434 422 321 byte

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 mungkin bukan bahasa terbaik untuk ini karena ada overhead kelas dan metode utama ...

Anda dapat menghilangkan metode utama menggunakan deklarasi statis, mengurangi jumlah byte lebih lanjut:

class A{
    static{...}

tetapi ini menghasilkan kesalahan (setelah berhasil dijalankan):

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

Hitungan byte tidak int menyertakan baris baru atau lekukan.


Saya tidak berpikir Anda perlu ruang setelah void main(){, dan tidak antara while(s.length()<5)dan s+=" ". (Kecuali Anda tidak menghitungnya dalam hitungan byte Anda). Dan Anda dapat menyimpan beberapa byte dengan mengubah d="Dec",c="Chr"ke d=p("Dec"),c=p("Chr")dan membuat perubahan panggilan Anda p(d)dan p(c)untuk ddan c.
Zacharý

434 menghapus semua spasi putih yang tidak perlu. Saran Anda membawanya ke 425. Terima kasih!
xirt

Mungkin ingin menambahkan catatan tentang 434 tanpa spasi yang tidak diperlukan ke dalam jawabannya
Zacharý

Selesai Catatan: program telah berubah secara signifikan sejak (dikurangi lebih lanjut) sehingga komentar di atas mungkin tidak lagi relevan
xirt

2

Tcl , 233 byte

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

Cobalah online!


Saya menjalankan ini dan saya mendapatkan 32 misalnya (a '' bukannya Space), dan 33!(tidak ada ruang di antara 33 dan !).
NoOneIsHere

@SeeOneRhino: Anda jelas tidak memperhatikan kode. Saya memodifikasi kode tautan setelah menempel di sini, dalam upaya untuk membuatnya lebih menarik, tetapi saya belum berhasil. Saya baru saja pergi ke halaman sekarang dan mengomentari upaya saya yang gagal dan mengulangi kode dari sini; Jika Anda pergi ke sana sekarang, Anda akan melihat kode persis sama dan Anda akan melihatnya mencetak dengan benar!
sergiol

Maaf, saya tidak melihat hasil edit Anda ke tautan. Saya berasumsi bahwa kodenya sama dengan yang Anda posting di sini.
NoOneIsHere

Tidak masalah, itu salah saya
sergiol

@SeeOneRhino: Saya mencapainya! Aku mengalahkan diriku sendiri!
sergiol

2

R , 235 228 221 212 byte

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

Cobalah online!

Saya berusaha sangat keras untuk mendapatkan di bawah 200 byte tetapi ini pastedan collapsemembunuh saya. Mengembalikan daftar garis.


1

JavaScript (ES6), 258 byte

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

PowerShell , 159 byte

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

Cobalah online!

Dua baris pertama hanya menciptakan string literal dan meninggalkannya di jalur pipa. Yang pertama menggunakan operator koma ,untuk membuat array, dan kemudian -joins array itu bersama-sama untuk membuat header. Yang kedua hanyalah perkalian string lurus.

Baris ketiga loop atas 32..63dan setiap iterasi mengirimkan tiga nilai $_, ($_+32)dan ($_+64)menjadi loop batin. Loop dalam melakukan a PadRightpada nilai (menambahkan spasi yang sesuai untuk pad ke 5karakter). Itu kemudian string digabungkan +dengan hasil pseudo-ternary bersarang( )[ ] . Pseudo-ternary memilih charrepresentasi nomor itu, atau yang lain Spaceatau DELjika itu nilai yang sesuai. Sekali lagi, kami PadRightkarakter yang sesuai.

Ketiga string (misalnya, 32 Space, 64 @, 96 `) diringkas dalam parens dan -joined dengan spidol kolom menjadi sebuah string tunggal. Masing-masing dari 32 string kemudian dibiarkan di dalam pipa. Pada akhir eksekusi, sebuah implisit Write-Outputmenyisipkan baris baru antara elemen-elemen pada pipeline, jadi kami mendapatkannya secara gratis.


1

Perl, 165 155 byte

$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 byte

Golf pertamaku, maaf atas kesalahan yang jelas

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"

Cobalah online!

Jika Anda bertanya-tanya, versi pertama adalah string yang disandikan base64.


@FlipTack Mengubahnya menjadi solusi aktual
sagiksp

Ruang putih tidak diperlukan di ljust(6) for.
Yytsi

Lain di x in [. Dan IIRC kurung kotak di dalam joindapat dihapus.
Yytsi

1

05AB1E , 82 76 byte

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

Cobalah online!

Masih bermain golf, ini bisa ditingkatkan banyak.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø mendorong angka empuk dengan teks yang setara:

[['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… | ©ý} bergabung bersama mereka ke dalam tabel:

['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×.Á.Á» menangani bagian tajuk tabel:

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 byte

<?=($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);

kerusakan

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

Menggunakan %-Nbernilai byte yang dihemat angka dan karakter.


Terlihat lebih baik menurut saya dengan jumlah byte yang sama. Coba online!
Jörg Hülsermann


0

T-SQL, 242 byte

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

Diformat:

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

Mencoba beberapa variasi, termasuk mengganti berbagai string umum dengan variabel lain, tetapi ini adalah versi terpendek yang saya temukan.


0

Python 3 , 154 byte

for l in[['Dec  Chr  ']*3,['-'*35]]+[[f"{x:<5}{['Space',chr(x),'DEL'][(x>32)+(x>126)]:5}"for x in(c,c+32,c+64)]for c in range(32,64)]:print(' | '.join(l))

Cobalah online!


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.