Tái tạo bảng ASCII dưới dạng bảng ASCII


26

Thường xuyên trong khi tôi chơi golf, tôi sẽ muốn biết giá trị ASCII của một nhân vật nào đó là gì. Một trong những tài nguyên yêu thích của tôi để tìm kiếm nhanh chóng tất cả các ký tự ASCII có thể inASCIItable.com . Điều này có một hình ảnh thực sự đẹp không chỉ hiển thị các ký tự ASCII có thể in và các giá trị của chúng, mà cả các ký tự mở rộng và không thể in được và các giá trị ở dạng thập lục phân, bát phân và HTML:

nhập mô tả hình ảnh ở đây

Thách thức ngày nay là tái tạo bảng ASCII đó dưới dạng bảng ASCII thay vì hình ảnh. Để đơn giản hơn, chúng tôi sẽ không sử dụng các ký tự điều khiển (ký tự dưới 32) và chúng tôi sẽ chỉ hiển thị giá trị thập phân và ký tự. Nói cách khác, thách thức của bạn là viết một chương trình đầy đủ hoặc một chức năng in hoặc trả về văn bản sau:

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

Không gian lưu trữ trên mỗi dòng và một dòng mới được cho phép. Vì đây là một thách thức , việc gửi của bạn có thể không nhận bất kỳ đầu vào nào, hoặc truy cập bất kỳ tài nguyên bên ngoài nào (như tệp hoặc web) và mục tiêu của bạn là nén mã để xuất văn bản này càng nhiều càng tốt.

Các sơ hở tiêu chuẩn được áp dụng và câu trả lời ngắn nhất tính theo byte sẽ thắng. Chúc bạn chơi golf vui vẻ!


3
Tôi có hình ảnh bảng ASCII chính xác được dán trên tường của mình ... Dù sao, một danh sách các dòng có thể được trả lại không?
FlipTack

2
@fliptack Tất nhiên là bạn có thể. Tại sao tôi không cho phép một cái gì đó hoàn toàn hợp lý như vậy?
DJMcMayhem

10
Tôi sẽ không nói đây là bản sao - cái còn lại yêu cầu các giá trị hex, tên không thể in được và là một định dạng bảng khác. Điều này dính vào ASCII có thể nhìn thấy và cho phép mã golfier bằng cách không yêu cầu mã 3 chữ cái của tất cả các không thể in được.
FlipTack

@FlipTack Nó vẫn có Space và DEL
simon

2
@gurka có, nhưng cái kia có mỗi ký tự điều khiển.
FlipTack

Câu trả lời:


11

Python 2, 185 183 175 159 byte

Đã lưu 8 byte nhờ FlipTack!

Vẫn còn khá mới mẻ đối với việc chơi golf trong 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]

Sử dụng một sự hiểu biết danh sách lồng nhau để tạo ra thân bảng.

Ung dung:

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]

Cố gắng cũ, 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]

Ung dung:

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]

Tôi thấy một khoảng trắng tại `for l in (i, 32 + i, 64 + i)])`, có thể được xóa để lưu một byte.
maxb



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


Câu trả lời tốt đẹp! Bạn có thể lưu thêm một byte bằng cách thay thế `${x='Dec Chr '}| ${x}| ${x}ở cuối dòng 2 bằng(x='Dec Chr ')+(' |'+x)*2+`
Luke

@ L.Serné Tôi không biết bất kỳ phiên bản ECMAScript nào sẽ lặp lại một chuỗi với *toán tử. Hay tôi bằng cách nào đó hiểu lầm đề nghị của bạn?
Arnauld

Rất tiếc, xấu của tôi. Đó là những gì bạn nhận được khi thử chơi một giải pháp python và sau đó là javascript.
Lu-ca

5

V , 98, 96 , 94 byte

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

Hãy thử trực tuyến!

Chỉ vừa mới ré lên dưới một trăm. Tôi sẽ xem liệu tôi có thể đánh bại Pyth không, nhưng tôi sẽ không thực hiện bất kỳ lời hứa nào.

Đây là một 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

Và đây là cách nó hoạt động:

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

Đây là nơi ta cảm thấy thú vị. Đầu tiên, hãy để tôi giải thích một vim-trick. Mặc dù ở chế độ chèn, một số ký tự được chèn (tất cả các ký tự ASCII có thể in, hầu hết các ký tự chưa được ánh xạ ở trên 0x7fvà một số ký tự khác), nhưng các ký tự khác có tác dụng phụ. Ví dụ: 0x1b( <esc>) sẽ thoát sang chế độ bình thường. 0x01( <C-a>) sẽ chèn lại văn bản được chèn cuối cùng, v.v. Đôi khi, chúng tôi muốn chèn các ký tự này theo nghĩa đen. Vì vậy, để chèn một ký tự thoát theo nghĩa đen, bạn phải gõ <C-v><esc>. Điều này làm việc cho tất cả các nhân vật có tác dụng phụ. Vì vậy, về cơ bản, <C-v>tương đương với dấu gạch chéo ngược trong các ngôn ngữ có chuỗi ký tự cho phép bạn thoát một số ký tự nhất định trong chuỗi.

Thủ thuật hữu ích khác với <C-v>trong chế độ chèn, là nó có thể được sử dụng để chèn các ký tự theo điểm mã , theo dạng thập phân, thập lục phân, thập phân hoặc thập lục phân. Vì chúng ta đã có các số tương ứng với các giá trị ASCII nhất định, chúng ta chỉ cần đặt <C-v>trước các ký tự đó và chạy văn bản tương ứng dưới dạng vim-keystrokes. Điều này có thể đạt được bằng lệnh regex và lệnh "Do 'x' trên mỗi dòng". Vì vậy, chúng tôi:

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

Tại thời điểm này, bộ đệm trông như thế này

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       

Bây giờ chúng ta chỉ cần một số dọn dẹp chung, chiếm phần lớn các byte trong câu trả lời này

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

Hãy thử trực tuyến!


Tôi có thể yêu cầu một phiên bản chưa được chỉnh sửa này không? Tôi thực sự mới học F # và tôi rất muốn hiểu đúng cách bạn đã làm điều này!
Ciaran_McCarthy

1
Dòng đầu tiên bí danh hai chức năng cho các tên ký tự đơn. Bây giờ nếu bạn làm ["ab"; "cd"] |> c |> pnó nối với "|" ký tự và in chúng, như "ab | cd", đó là ý tưởng cơ bản để in bảng. Phần còn lại khá đơn giản, chỉ cần tránh khoảng trắng bất cứ nơi nào có thể.
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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động:

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

Chạy với -Ecờ:

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

-2 byte nhờ @GB .


Nếu tôi hiểu một chút về Perl, có lẽ bạn có thể cắt 2 khoảng trắng bằng cách sử dụng "% -5s" thay vì "% -3s" (tình cờ, đó là những gì tôi làm trong 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");}

Hãy thử trực tuyến!

Bán vô chủ:

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 được lưu nhờ vào @ nmjcman101 để sử dụng <C-v>g<C-a>cho các số thay vìline('.')

Lưu 2 byte nhờ @DJMcMayhem để xóa các dòng có khoảng trắng hàng đầu bằng cách sử dụng ÇÓ/dvà bằng cách sử dụng để xóa thêm khoảng trắng và sắp xếp lại nội dung

Câu trả lời này cạnh tranh với câu trả lời V của @ nmjcman101 (sử dụng :set ve=all). Nhưng bây giờ, tôi đã tìm ra một cách để loại bỏ những cái đó A ^[và lưu một số byte và chúng tôi đang ở mức bằng nhau

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

Hãy thử trực tuyến!

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 

Giải thích (không đầy đủ và lỗi thời)

Chiến lược ở đây là tôi đang sử dụng số dòng để tạo các điểm mã ASCII.

Lưu ý: ^[0x1b, ^VC-v

Đầu tiên chúng tôi tạo ra tất cả các nhân vật.

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

Bộ đệm hiện tại trông như

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

Bây giờ chúng tôi chèn một dòng mới giữa các ký tự này

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

Đây là một sự thay thế cho 32 SPACE ... 127 DELphần mã của bạn: Hãy thử trực tuyến! Nó sử dụng thứ gọn gàng đó, nơi bạn có thể làm nổi bật một loạt các số, và sau đó g^Alàm cho nó trở thành một chuỗi tăng dần (mới trong Vim 8?)
nmjcman101

@ nmjmcman101 Vâng, nó đã được thêm vào trong 7.4. Một cái gì đó, nhưng chính thức được thêm vào 8. Thậm chí tốt hơn là sử dụng lệnh Norm Hãy thử trực tuyến!
DJMcMayhem

Dù bằng cách nào, một khi bạn nhận được rằng bạn có thể thực hiện :set ve=allvà sau đó con trỏ sẽ di chuyển đến những nơi không có văn bản, cho phép bạn chèn các ống dễ dàng hơn và sao chép / dán vào những nơi bạn cần mà không phải rắc A <esc>khắp nơi
nmjcman101

@ nmjcman101 g^AXin cảm ơn, nó đã tiết kiệm cho tôi 12 byte :)
Kritixi Lithos

@DJMcMayhem Vì một số lý do, sử dụng định mức và sau đó tăng số không hoạt động
Kritixi Lithos

3

V , 130 120 99 byte

Câu lạc bộ phụ 100. Tôi không còn tin rằng đó :se ve=alllà cách tốt nhất để làm việc này. Đó là thêm ... 11 byte chỉ để viết |'s! Nhưng đó là những gì tôi có.

Tôi đang đăng bài này gần như cạnh tranh với câu trả lời @KritixiLuthos bằng cách sử dụng :se ve=allđể tránh một số A <esc>. Tôi không tin rằng một trong hai phương pháp vẫn tốt hơn, vì vậy hy vọng điều này có thể truyền cảm hứng cho một số người chơi golf ở cả hai bên và xem phương pháp nào lấy bánh.

Tôi cũng mong đợi một nửa @DJMcMayhem sẽ đá cả quần của chúng tôi

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

Hãy thử trực tuyến!

Hexdump cho sự tò mò (nếu có hứng thú, tôi sẽ thay đổi nó thành một khối ký tự ẩn kiểu 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
Lệnh toàn cầu có thể được rút ngắn bằng một nhưng. Đối với một, đó ddlà ngầm nếu bạn chỉ cần làm d. Bạn cũng có thể làm điều <M-s>đó luôn tương đương với \strong regex. Vì vậy, bạn có thể rút ngắn nó thành : ç^ó*/d. Nhưng nếu bạn tắt lệnh toàn cục cho nghịch đảo, :g!bạn có thể tìm kiếm mọi dòng không khớp với một ký tự không phải khoảng trắng. ÇÓ/dtương đương với: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"}}

Định dạng:

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

Hãy thử trực tuyến!


2

C 188 byte

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

Thông thường trông như thế này:

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)

Dòng mới được thêm vào cho rõ ràng.

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

Bạn có thể chắc chắn tiết kiệm một số byte bằng cách làm Pđược printf(, như ở đây: repl.it/JBRD
Zachary

Và bằng cách loại bỏ không gian trên dòng thứ tư của bạn.
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 có lẽ không phải là ngôn ngữ tốt nhất cho việc này vì có sự kết hợp của các lớp và phương thức chính ...

Bạn có thể loại bỏ phương thức chính bằng cách sử dụng khai báo tĩnh, giảm số đếm byte xuống hơn nữa:

class A{
    static{...}

nhưng điều này dẫn đến một lỗi (sau khi chạy thành công):

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

Số byte không int bao gồm các dòng mới hoặc thụt lề.


Tôi không nghĩ rằng bạn cần một không gian sau void main(){, và giữa while(s.length()<5)s+=" ". (Trừ khi bạn không tính số đó trong số byte của bạn). Và bạn có thể tiết kiệm một vài byte bằng cách thay đổi d="Dec",c="Chr"để d=p("Dec"),c=p("Chr")và làm thay đổi cuộc gọi của bạn p(d)p(c)để dc.
Zacharý

434 đã loại bỏ tất cả các khoảng trắng không cần thiết. Đề xuất của bạn đưa nó xuống 425. Cảm ơn!
xirt

Có thể muốn thêm một ghi chú về 434 không có khoảng trắng không cần thiết vào câu trả lời
Zacharý

Làm xong. Lưu ý: chương trình đã thay đổi đáng kể kể từ khi (giảm hơn nữa) vì vậy các nhận xét ở trên có thể không còn phù hợp
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"]

Hãy thử trực tuyến!


Tôi đã chạy cái này và tôi lấy 32 ví dụ (một '' thay vì Space) và 33!(không có khoảng trống ở giữa 33!).
NoOneIsĐây là

@SeeOneRhino: Bạn rõ ràng không chú ý đến mã. Tôi đã sửa đổi mã của liên kết sau khi dán ở đây, trong nỗ lực để chơi nó nhiều hơn, nhưng tôi đã không thành công. Tôi vừa mới đi đến trang và nhận xét nỗ lực thất bại của tôi và đã sửa lại mã từ đây; Nếu bạn đến đó ngay bây giờ, bạn sẽ thấy mã chính xác bằng nhau và bạn sẽ thấy nó in đúng thứ!
sergiol

Tôi xin lỗi, tôi đã không thấy chỉnh sửa của bạn để liên kết. Tôi giả định rằng mã giống như những gì bạn đã đăng ở đây.
NoOneIsHãy

Không vấn đề gì, đó là lỗi của tôi
sergiol

@SeeOneRhino: Tôi đã đạt được nó! Tôi đã vượt qua chính mình!
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

Hãy thử trực tuyến!

Tôi đã rất cố gắng để có được dưới 200 byte nhưng những thứ này pastecollapseđang giết chết tôi. Trả về một danh sách các dòng.


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

Hãy thử trực tuyến!

Hai dòng đầu tiên chỉ là tạo các chuỗi ký tự và để chúng trên đường ống dẫn. Đầu tiên sử dụng toán tử dấu phẩy ,để tạo một mảng và sau đó -joins mảng đó lại với nhau để tạo các tiêu đề. Thứ hai chỉ là một chuỗi nhân thẳng.

Dòng thứ ba vòng qua 32..63và mỗi lần lặp sẽ gửi ba giá trị $_, ($_+32)($_+64)vào một vòng lặp bên trong. Vòng lặp bên trong thực hiện một PadRightgiá trị (thêm khoảng trắng thích hợp vào phần 5ký tự). Đó là chuỗi kết hợp +với kết quả của một ternary-ternary lồng nhau ( )[ ]. Giả giả chọn charđại diện cho số đó, hoặc người nào khácSpace hoặc DELnếu không thì đó là giá trị phù hợp. Một lần nữa, chúng tôi PadRightcác nhân vật thích hợp.

Ba chuỗi (ví dụ 32 Space, 64 @, 96 `) đều được gói gọn trong dấu ngoặc và -joined với dấu cột vào một chuỗi duy nhất. Mỗi trong số 32 chuỗi đó sau đó được để lại trên đường ống. Khi kết thúc thực hiện, một ẩn Write-Outputsẽ chèn một dòng mới giữa các thành phần trên đường ống, vì vậy chúng tôi nhận được điều đó miễn phí.


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 đầu tiên của tôi, xin lỗi vì những sai lầm rõ ràng

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"

Hãy thử trực tuyến!

Trong trường hợp bạn đang tự hỏi, phiên bản đầu tiên là một chuỗi được mã hóa base64.


@FlipTack Thay đổi nó thành một giải pháp thực tế
sagiksp

Khoảng trắng không đáp ứng tại ljust(6) for.
Yytsi

Khác tại x in [. Và IIRC dấu ngoặc vuông bên trong joincó thể bị xóa.
Yytsi

1

05AB1E , 82 76 byte

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

Hãy thử trực tuyến!

Vẫn chơi golf, điều này có thể được cải thiện rất nhiều.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø đẩy số đệm với văn bản tương đương:

[['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… | ©ý} tham gia cùng nhau vào bàn:

['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×.Á.Á» chăm sóc phần tiêu đề của bảng:

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

phá vỡ

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

Sử dụng %-Nlà giá trị byte mà các số và ký tự bên phải sẽ lưu.


Theo quan điểm của tôi có vẻ tốt hơn với cùng số byte Hãy thử trực tuyến!
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

Định dạng:

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

Đã thử một vài biến thể, bao gồm thay thế các chuỗi phổ biến khác nhau bằng các biến khác, nhưng đây là phiên bản ngắn nhất tôi tìm thấy.



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.