สร้างตาราง ASCII ขึ้นมาใหม่เป็นตาราง ASCII


26

บ่อยครั้งในขณะที่ฉันเล่นกอล์ฟฉันจะต้องการทราบว่าค่า ASCII ของอักขระบางตัวคืออะไร หนึ่งในแหล่งข้อมูลที่ชื่นชอบได้อย่างรวดเร็วมองขึ้นทั้งหมดของตัวอักขระ ASCIIเป็นASCIItable.com นี่เป็นภาพที่ดีมากที่ไม่เพียง แต่แสดงตัวอักษร ASCII ที่พิมพ์ได้และค่าของมัน แต่ยังรวมถึงตัวอักษรที่ไม่สามารถพิมพ์ได้และส่วนขยายและค่าเป็นเลขฐานสิบหกฐานแปดและ HTML:

ป้อนคำอธิบายรูปภาพที่นี่

ความท้าทายในวันนี้คือการสร้างตาราง ASCII นั้นใหม่เป็นตาราง ASCII แทนภาพ เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นเราจะไม่ใช้ตัวควบคุม (ตัวละครต่ำกว่า 32) และเราจะแสดงเฉพาะค่าทศนิยมและตัวอักษร ในคำอื่น ๆ ความท้าทายของคุณคือการเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นที่พิมพ์หรือส่งกลับข้อความต่อไปนี้:

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

ช่องว่างต่อท้ายในแต่ละบรรทัดและขึ้นบรรทัดใหม่ที่ได้รับอนุญาต เนื่องจากนี่เป็นท้าทายที่การส่งของคุณจึงไม่สามารถป้อนข้อมูลใด ๆ หรือเข้าถึงทรัพยากรภายนอกใด ๆ (เช่นไฟล์หรือเว็บ) และเป้าหมายของคุณคือบีบอัดโค้ดเพื่อส่งข้อความนี้ให้ได้มากที่สุด

ช่องโหว่มาตรฐานใช้และคำตอบที่สั้นที่สุดเป็นไบต์ชนะ มีความสุขในการเล่นกอล์ฟ!


3
ฉันมีรูปตาราง ASCII ที่แน่นอนติดอยู่บนผนังของฉัน ... อย่างไรก็ตามจะสามารถส่งคืนรายการบรรทัดได้หรือไม่
FlipTack

2
@ fliptack แน่นอนคุณสามารถ ทำไมฉันไม่ยอมให้สิ่งที่สมเหตุสมผลอย่างสมบูรณ์แบบเช่นนั้น
DJMcMayhem

10
ฉันจะไม่พูดว่านี่เป็นล่อลวง - อีกอันหนึ่งต้องการค่าเลขฐานสิบหกชื่อที่ไม่พิมพ์และเป็นรูปแบบตารางอื่น สิ่งนี้ยึดติดกับ ASCII ที่มองเห็นได้และอนุญาตให้ใช้รหัสนักกอล์ฟโดยไม่ขอรหัส 3 ตัวอักษรของ unprintables ทั้งหมด
FlipTack

@FlipTack มันยังมีช่องว่างและ DEL
simon

2
@ gurka ใช่ แต่อีกอันหนึ่งมีอักขระควบคุมทุกตัว
FlipTack

คำตอบ:


11

Python 2, 185 183 175 159 bytes

บันทึก 8 ไบต์ขอบคุณ FlipTack!

ยังค่อนข้างใหม่ในการเล่นกอล์ฟใน 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]

ใช้ความเข้าใจในรายการแบบซ้อนเพื่อสร้างเนื้อหาตาราง

Ungolfed:

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]

Ungolfed:

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]

ฉันเห็นพื้นที่ที่ `สำหรับ l ใน (i, 32 + i, 64 + i)])`, สามารถลบออกได้เพื่อบันทึกหนึ่งไบต์
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 โดย(x='Dec Chr ')+(' |'+x)*2+`
ลุค

@ L.Sernéฉันไม่รู้จักรุ่น ECMAScript ใด ๆ ที่จะทำซ้ำสตริงด้วยตัว*ดำเนินการ หรือฉันเข้าใจผิดข้อเสนอแนะของคุณ?
Arnauld

โอ๊ะฉันไม่ดี นั่นคือสิ่งที่คุณจะลองเล่นด้วยโซลูชันไพ ธ อนและจากนั้นจาวาสคริปต์
ลุค

5

V , 98, 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

ที่นี่เป็นที่ที่น่าสนใจ ก่อนอื่นให้ฉันอธิบายอุบายหลอกลวง ขณะอยู่ในโหมดแทรกอักขระบางตัวจะถูกแทรก (อักขระ ASCII ที่พิมพ์ได้ทั้งหมดอักขระที่ไม่ได้แมปส่วนใหญ่ด้านบน0x7fและอักขระอื่น ๆ สองสามตัว) แต่อักขระอื่นมีผลข้างเคียง ตัวอย่างเช่น0x1b( <esc>) จะหนีไปที่โหมดปกติ 0x01( <C-a>) จะแทรกข้อความที่แทรกล่าสุดอีกครั้งในบางครั้งเราต้องการแทรกอักขระเหล่านี้อย่างแท้จริง <C-v><esc>ดังนั้นเพื่อแทรกตัวหนีตัวอักษรคุณต้องพิมพ์ ใช้ได้กับทุกตัวละครที่มีผลข้างเคียง ดังนั้นโดยพื้นฐานแล้ว<C-v>จะเท่ากับแบ็กสแลชในภาษาที่มีตัวอักษรสตริงที่อนุญาตให้คุณหลีกเลี่ยงอักขระบางตัวในสตริง

เคล็ดลับที่มีประโยชน์อื่น ๆ ด้วย<C-v>ในโหมดแทรกคือมันสามารถใช้เพื่อแทรกอักขระตามจุดโค้ดในทศนิยมสิบฐานสิบฐานแปดหรือฐานสิบหก Unicode เนื่องจากเรามีตัวเลขที่สอดคล้องกับค่า ASCII บางอย่างเราจึงต้องใส่<C-v>อักขระก่อนหน้าเหล่านั้นและเรียกใช้ข้อความที่เกี่ยวข้องเป็น vim-keystrokes สิ่งนี้สามารถทำได้ด้วยคำสั่ง regex และคำสั่ง "Do '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
บรรทัดแรกใช้นามแฝงสองฟังก์ชันกับชื่ออักขระเดี่ยว ตอนนี้ถ้าคุณทำ["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'

-2 ไบต์ขอบคุณที่@GB


ถ้าฉันเข้าใจ Perl เล็กน้อยคุณอาจตัดช่องว่าง 2 ช่องโดยใช้ "% -5s" แทน "% -3s" (โดยบังเอิญนั่นคือสิ่งที่ฉันทำในทับทิม)
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");}

ลองออนไลน์!

กึ่ง 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

ทับทิม 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

V , 151 150 148 136 135 130 129 125 ไบต์

บันทึก 12 ไบต์ด้วย @ nmjcman101 สำหรับใช้<C-v>g<C-a>แทนตัวเลขline('.')

บันทึก 2 ไบต์ด้วย @DJMcMayhem สำหรับการลบบรรทัดที่มีช่องว่างนำโดยใช้ÇÓ/dและโดยใช้เพื่อลบช่องว่างเพิ่มเติมและจัดเรียงเนื้อหาใหม่

คำตอบนี้เป็นการแข่งขันกับคำตอบ V ของ @ nmjcman101 (ซึ่งใช้: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 Re g^Aขอบคุณมันบันทึกฉัน 12 ไบต์ :)
Kritixi Lithos

@DJMcMayhem ด้วยเหตุผลบางอย่างโดยใช้บรรทัดฐานแล้วการเพิ่มตัวเลขไม่ได้ทำงาน
Kritixi Lithos

3

V , 130 120 99 99 ไบต์

ย่อย 100 สโมสร ฉันไม่เชื่ออีกต่อไปว่า:se ve=allเป็นวิธีที่ดีที่สุดในการทำเช่นนี้ มันพิเศษ ... 11 ไบต์สำหรับการเขียน|ของ! แต่นั่นคือสิ่งที่ฉันมี

ผมโพสต์นี้เกือบจะในการแข่งขันกับ @KritixiLuthos ตอบใช้:se ve=allเพื่อหลีกเลี่ยงบางA <esc>'s ฉันไม่เชื่อว่าวิธีใดวิธีหนึ่งจะดีกว่าดังนั้นหวังว่านี่จะเป็นแรงบันดาลใจให้นักกอล์ฟเล่นทั้งสองฝ่ายและดูว่าวิธีใดที่จะใช้เค้ก

ฉันคาดหวังอีกครึ่งหนึ่งที่ @DJMcMayhem ที่จะเตะทั้งกางเกงของเรา

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

ลองออนไลน์!

Hexdump สำหรับคนที่อยากรู้อยากเห็น (ถ้ามีความสนใจฉันจะเปลี่ยนเป็นบล็อกตัวละครที่ซ่อนสไตล์)

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
คำสั่งทั่วโลกอาจจะสั้นลงได้บ้าง สำหรับหนึ่งที่เป็นนัยถ้าคุณเพียงแค่ทำdd dนอกจากนี้คุณยังสามารถทำ<M-s>สิ่งนี้ได้เสมอ\sใน regex ç^ó*/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");}}

แน่นอนคุณสามารถบันทึกไบต์บางส่วนโดยการทำPจะprintf(เป็นแสดงที่นี่: repl.it/JBRD
Zachary

และโดยการลบช่องว่างในบรรทัดที่สี่ของคุณ
Zacharý

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 อาจไม่ใช่ภาษาที่ดีที่สุดสำหรับเรื่องนี้เนื่องจากมีค่าใช้จ่ายของชั้นเรียนและวิธีการหลัก ...

คุณสามารถกำจัดเมธอดหลักโดยใช้การประกาศแบบสแตติกลดจำนวนไบต์ลงอีก:

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)ไปและd c
Zacharý

The 434 กำลังลบช่องว่างที่ไม่จำเป็นออกทั้งหมด คำแนะนำของคุณนำไปสู่ ​​425 ขอบคุณ!
xirt

อาจต้องการที่จะเพิ่มบันทึกเกี่ยวกับความเป็นอยู่ 434 w / o ที่ไม่จำเป็นลงในช่องว่างคำตอบ
Zachary

เสร็จสิ้น หมายเหตุ: โปรแกรมมีการเปลี่ยนแปลงอย่างมีนัยสำคัญตั้งแต่ (ลดลงอีก) ดังนั้นความคิดเห็นข้างต้นอาจไม่เกี่ยวข้องอีกต่อไป
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 ตัวอย่าง (a '' แทนSpace) และ33!(ไม่มีที่ว่างระหว่าง 33และ!)
NoOne อยู่ที่นี่

@SeeOneRhino: คุณเห็นได้ชัดว่าไม่ได้ใส่ใจกับรหัส ฉันแก้ไขโค้ดของลิงก์หลังจากวางที่นี่เพื่อพยายามตีกอล์ฟให้มากขึ้น แต่ฉันยังไม่ประสบความสำเร็จ ฉันเพิ่งไปที่หน้าตอนนี้และแสดงความคิดเห็นความพยายามที่ล้มเหลวของฉันและลองรหัสจากที่นี่ถ้าคุณไปที่นั่นตอนนี้คุณจะเห็นรหัสเท่ากันและคุณจะเห็นมันพิมพ์สิ่งที่ถูกต้อง!
sergiol

ขออภัยฉันไม่เห็นการแก้ไขของคุณในลิงก์ ฉันคิดว่ารหัสนั้นเหมือนกับที่คุณโพสต์ไว้ที่นี่
NoOne อยู่ที่นี่

ไม่มีปัญหามันเป็นความผิดของฉัน
sergiol

@SeeOneRhino: ฉันทำได้แล้ว! ฉันก้าวร้าวตัวเอง!
sergiol

2

R , 235 228 221 212 ไบต์

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 ไบต์ แต่สิ่งเหล่านี้pasteและcollapseกำลังฆ่าฉัน ส่งคืนรายการบรรทัด


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

PowerShellขนาด 159 ไบต์

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

ลองออนไลน์!

สองบรรทัดแรกเป็นเพียงการสร้างสตริงตัวอักษรและทิ้งไว้ในท่อ วิธีแรกใช้โอเปอเรเตอร์คอมม่า,เพื่อสร้างอาร์เรย์จากนั้นใช้-joinอาร์เรย์ร่วมกันเพื่อสร้างส่วนหัว ที่สองเป็นเพียงการคูณสตริงตรง

บรรทัดที่สาม loops กว่า32..63และแต่ละซ้ำส่งสามค่า$_, ($_+32)และ($_+64)เป็นห่วงด้านใน ลูปด้านในทำPadRightบนค่า (เพิ่มช่องว่างที่เหมาะสมเพื่อให้แผ่นกับ5อักขระ) นั่นคือสตริงแล้วตัดแบ่งที่มีผลการซ้อนกันหลอก+ ternary ( )[ ]pseudo-ternary เลือกการcharแสดงจำนวนนั้นหรืออย่างอื่นSpaceหรือDELเป็นค่าที่เหมาะสม อีกครั้งเราPadRightเป็นตัวละครที่เหมาะสม

ทั้งสามสาย (ตัวอย่างเช่น32 Space, 64 @, 96 `) จะห่อหุ้มใน parens และ-joined ที่มีเครื่องหมายคอลัมน์เป็นสายเดียว แต่ละ 32 สตริงเหล่านั้นจะถูกทิ้งไว้บนไพพ์ไลน์ ในตอนท้ายของการดำเนินการนัยWrite-Outputจะแทรกขึ้นบรรทัดใหม่ระหว่างองค์ประกอบในไปป์ไลน์ดังนั้นเราจะได้รับฟรี


1

เพิร์ล 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ไม่ได้รับการร้องขอที่
Yytsi

x in [ที่อีก และ IIRC วงเล็บเหลี่ยมด้านในjoinสามารถลบได้
Yytsi

1

05AB1E , 82 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จะคุ้มค่ากับจำนวนไบต์ที่ตัวเลขและตัวละครที่ถูกต้อง


ดูดีกว่าในความคิดของฉันด้วยจำนวนไบต์เดียวกันลองออนไลน์!
JörgHülsermann


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.