ASCII 테이블을 ASCII 테이블로 다시 작성


26

코드 골프를하는 동안 종종 특정 문자의 ASCII 값이 무엇인지 알고 싶습니다. 인쇄 가능한 모든 ASCII 문자 를 빠르게 찾는 데 가장 좋아하는 리소스 중 하나 는 ASCIItable.com 입니다. 이것은 인쇄 가능한 ASCII 문자와 그 값뿐만 아니라 인쇄 할 수없는 확장 문자 및 16 진수, 8 진수 및 HTML의 값을 보여주는 정말 멋진 이미지입니다.

여기에 이미지 설명을 입력하십시오

오늘날의 과제는 해당 ASCII 테이블을 이미지 대신 ASCII 테이블로 재생성하는 것입니다. 보다 간단하게하기 위해 제어 문자 (32 자 미만)를 사용하지 않으며 10 진수 값과 문자 만 표시합니다. 즉, 전체 프로그램 또는 다음 텍스트를 인쇄하거나 반환하는 함수를 작성해야합니다.

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

각 줄의 후행 공백과 후행 줄 바꿈이 허용됩니다. 이는 문제이므로 제출물은 입력을받지 않거나 외부 리소스 (예 : 파일 또는 웹)에 액세스 할 수 없으며 가능한 한이 텍스트를 출력하도록 코드를 압축하는 것이 목표입니다.

표준 허점이 적용되며 바이트 단위의 최단 답변이 이깁니다. 행복한 골프!


3
정확한 ASCII 테이블 이미지가 내 벽에 붙어 있습니다 ... 어쨌든, 라인 목록을 반환 할 수 있습니까?
FlipTack

2
@fliptack 물론 가능합니다. 왜 그렇게 합리적인 것을 허용하지 않습니까?
DJMcMayhem

10
나는 이것이 속임수라고 말하지 않을 것입니다-다른 하나는 16 진수 값, 인쇄 할 수없는 이름이 필요하며 다른 테이블 형식입니다. 이것은 보이는 ASCII를 고수하고 인쇄 할 수없는 모든 문자의 3 ​​글자 코드를 요구하지 않음으로써 골퍼 코드를 허용합니다.
FlipTack

@FlipTack 그것은 여전히 ​​공간과 델을 가지고 있습니다
simon

2
@ gurka 네,하지만 다른 하나에는 모든 단일 제어 문자가 있습니다.
FlipTack

답변:


11

파이썬 2 185 183 175 159 바이트

FlipTack 덕분에 8 바이트가 절약되었습니다!

파이썬에서 아직 골프를 처음 접하는 사람들.

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

중첩 된 목록 이해를 사용하여 테이블 본문을 생성합니다.

언 골프 드 :

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

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

이전 시도, 185 183 175 바이트

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

언 골프 드 :

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

`in l in (i, 32 + i, 64 + i)])`에 공백이있는 것을 보았습니다 .1 바이트를 절약하기 위해 제거 할 수 있습니다.
maxb



5

자바 스크립트 (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+`
Luke

@ L.Serné *연산자 로 문자열을 반복하는 ECMAScript 버전을 모른다 . 아니면 어떻게 든 당신의 제안을 오해하고 있습니까?
Arnauld

죄송합니다. 그것은 당신이 파이썬 솔루션을 골프 한 다음 자바 스크립트를 시도하려고하는 것입니다.
Luke

5

V , 98, 96 , 94 바이트

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

온라인으로 사용해보십시오!

그냥 거의 백 아래에서 끽끽 소리. Pyth를 이길 수 있는지는 알겠지만 약속은하지 않겠습니다.

다음은 16 진수 덤프입니다.

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

작동 방식은 다음과 같습니다.

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

여기 흥미로운 곳이 있습니다. 먼저, Vim-Trick을 설명하겠습니다. 삽입 모드에서는 특정 문자 (모든 인쇄 가능한 ASCII 문자, 위의 매핑되지 않은 문자 0x7f및 기타 문자)가 삽입되지만 다른 문자에는 부작용이 있습니다. 예를 들어 0x1b( <esc>)는 일반 모드로 이탈합니다. 0x01( <C-a>)은 마지막으로 삽입 된 텍스트 등을 다시 삽입합니다. 때로는 이러한 문자를 문자 그대로 삽입하려고합니다. 리터럴 이스케이프 문자를 삽입하려면을 입력해야합니다 <C-v><esc>. 부작용이있는 모든 문자에 적용됩니다. 따라서 본질적 <C-v>으로 문자열의 특정 문자를 이스케이프 할 수있는 문자열 리터럴이있는 언어의 백 슬래시와 같습니다.

<C-v>삽입 모드의 또 다른 유용한 트릭 은 십진수, 16 진, 8 진 또는 16 진 유니 코드에서 코드 포인트로 문자삽입 하는 데 사용할 수 있다는 것 입니다. 특정 ASCII 값에 해당하는 숫자가 이미 있으므로 <C-v>해당 문자 앞에 문자 를 넣고 해당 텍스트를 vim-keystrokes로 실행하면됩니다. 이것은 정규식 명령과 "모든 라인에 '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

온라인으로 사용해보십시오!


이것의 ungolfed 버전을 요청할 수 있습니까? 저는 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

펄, 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 .


나는 약간의 펄을 이해한다면, 어쩌면 당신은 (내가 루비에서 할 무엇을하는, 부수적) 대신 "%는 -3s"의 "%가 -5s"을 사용하여이 개 공간을 줄일 수
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 바이트

@ nmjcman101 덕분에 12 바이트가 절약 <C-v>g<C-a>되었습니다.line('.')

@DJMcMayhem 덕분에 선행 공백이있는 줄 을 제거하고 추가 공백을 제거하고 물건을 다시 정렬 ÇÓ/d하는 데 사용하여 2 바이트 절약

이 답변은 @ nmjcman101의 V 답변 (을 사용 :set ve=all) 과 경쟁 합니다 . 그러나 지금, 나는 그것들을 제거 A ^[하고 약간의 바이트를 저장 하는 방법을 찾았고 우리는 짝수 바이트에 있습니다.

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

온라인으로 사용해보십시오!

16 진 덤프 :

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

설명 (미완료 및 구식)

여기서 전략은 ASCII 코드 포인트를 생성하기 위해 줄 번호를 사용하고 있다는 것입니다.

참고 :이 ^[되어 0x1b, ^V이다C-v

먼저 모든 문자를 생성합니다.

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

현재 버퍼는 다음과 같습니다

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

이제이 문자들 사이에 줄 바꿈을 삽입합니다

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

32 SPACE ... 127 DEL코드 일부를 대체하는 방법은 다음과 같습니다 . 온라인에서 사용해보십시오! 그것은 당신이 많은 숫자를 강조 할 수있는 깔끔한 것을 사용하고 g^A그것을 증가하는 순서 로 만듭니다 (Vim 8의 새로운 기능?)
nmjcman101

@ nmjmcman101 예, 7.4.something에 추가되었지만 공식적으로 8에 추가되었습니다. norm 명령을 사용하는 것이 더 좋습니다 . 온라인으로 사용해보십시오!
DJMcMayhem

어느 쪽이든, 일단 할 수 있으면 :set ve=all커서가 텍스트가없는 곳으로 이동하여 파이프를 더 쉽게 삽입하고 A <esc>어디서나 뿌릴 필요없이 필요한 곳에 복사 / 붙여 넣기를 할 수 있습니다
nmjcman101

@ nmjcman101 다시 g^A감사합니다, 그것은 12 바이트를 절약했습니다 :)
Kritixi Lithos

@DJMcMayhem 어떤 이유로 든 규범을 사용한 다음 숫자를 증가시키는 것이 작동하지 않습니다.
Kritixi Lithos

3

V , 130 (120) 99 바이트

서브 100 클럽. 더 이상 :se ve=all이것이 최선의 방법 이라고 확신하지 않습니다 . 의 ...를 쓰기위한 여분의 ... 11 바이트입니다 |! 그러나 그것이 내가 가진 것입니다.

나는 이것을 @KritixiLuthos와 경쟁하여 거의 :se ve=all일부를 피하기 위해 사용 하고 A <esc>있습니다. 나는 어느 쪽의 방법이 더 낫다는 것을 확신하지 못하기 때문에, 이것이 두 당사자 모두에게 골프를 불러 일으키고 어떤 방법이 케이크를 취하는지를 볼 수 있기를 바랍니다.

또한 @DJMcMayhem이 바지를 걷어 차리기를 기대하는 절반

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

온라인으로 사용해보십시오!

호기심에 대한 Hexdump (관심이 있다면 vim 스타일의 숨겨진 문자 블록으로 변경하겠습니다)

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

1
글로벌 명령은 상당히 단축 될 수 있습니다. 우선, dd당신이하는 경우는 암시 적 d입니다. 정규식에서 <M-s>항상 동등한 작업 을 수행 할 수도 있습니다 \s. 따라서 다음과 같이 단축 할 수 ç^ó*/d있습니다.. 그러나 역의 전역 명령을 끄면 공백이 아닌 문자와 일치 하지 않는:g! 모든 줄을 검색 할 수 있습니다. 에 해당되는ÇÓ/d:g!/\S/normal dd
DJMcMayhem

3

AWK , 200 바이트

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

형식화 :

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

온라인으로 사용해보십시오!


2

C 188 바이트

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

일반적으로 다음과 같습니다.

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

2

C (249 바이트)

명확성을 위해 줄 바꿈이 추가되었습니다.

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


그리고 네 번째 줄의 공간을 제거하여.
Zacharý

2

자바, 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)dc.
Zacharý

434는 불필요한 공백을 모두 제거했습니다. 당신의 제안은 425로 내려갑니다. 감사합니다!
xirt 2016 년

434에 불필요한 공백이없는 것에 대한 메모를 답변에 추가하고 싶을 수도 있습니다.
Zacharý

끝난. 참고 :이 프로그램은 크게 위의 의견은 더 이상 관련 될 수 있도록 (더 감소 없음) 이후 변경된
xirt

2

Tcl , 233 바이트

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

온라인으로 사용해보십시오!


나는 이것을 실행 32 했고 예를 들어 (대신에 '' Space) 및 33!( 와 사이에 공백 없음 )을 얻 습니다 . 33!
NoOneIsHere

@SeeOneRhino : 코드에주의를 기울이지 않습니다. 여기에 붙여 넣은 후에 링크 코드를 수정하여 더 많은 골프를 치기 위해 노력했지만 아직 성공하지 못했습니다. 방금 지금 페이지에 가서 실패한 시도에 댓글을 달고 여기에서 코드를 다시 붙여 넣었습니다. 지금 거기에 가면 정확히 동일한 코드가 표시되고 올바르게 인쇄됩니다.
sergiol

죄송합니다. 링크 수정 사항이 보이지 않습니다. 코드가 여기에 게시 한 것과 동일하다고 가정했습니다.
NoOneIsHere1

문제 없습니다, 그것은 내 잘못이었습니다
sergiol

@SeeOneRhino : 나는 그것을 달성했다! 나는 나 자신을 능가했다!
sergiol

2

R , 235228221212 바이트

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

자바 스크립트 (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 해당 배열을 함께 사용하여 헤더를 만듭니다. 두 번째는 단순한 문자열 곱셈입니다.

세 번째 행을 통해 루프 32..63각 반복은 세 개의 값을 전송 $_, ($_+32)($_+64)내부 루프로. 내부 루프는 PadRight값에 대해 수행합니다 ( 5문자 에 채울 적절한 공백을 추가 함 ). 그런 다음 +중첩 된 의사 삼원의 결과와 연결된 문자열 ( )[ ]입니다. 의사 삼항 char은 해당 숫자 의 표현 또는 다른 값 Space또는 DEL적절한 값인지 선택합니다. 다시, 우리 PadRight는 적절한 인물입니다.

이 세 문자열 (예를 들어 32 Space, 64 @, 96 `) 괄호 내에 캡슐화되고 -join단일 문자열로 컬럼 마커 에드. 그런 다음 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

파이썬 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, 163149147 바이트

<?=($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örg Hülsermann 2016 년


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.