Відтворити таблицю 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-літерні коди всіх недрукованих друкованих видань.
FlipTack

@FlipTack У ньому все ще є космос і DEL
simon

2
@gurka так, але інший має кожен контрольний символ.
FlipTack

Відповіді:


11

Python 2, 185 183 175 159 байт

Збережено 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]

Використовує розуміння вкладеного списку для генерації тіла таблиці.

Безголівки:

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]

Я бачу пробіл `для 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, яка б повторювала рядок з *оператором. Або я якось нерозумію вашу пропозицію?
Арнольд

На жаль, моя погана. Це те, що ви отримуєте, намагаючись розіграти пітонське рішення, а потім JavaScript.
Лука

5

V , 98, 96 , 94 байт

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

Спробуйте в Інтернеті!

Тільки ледве скрипить під сотнею. Я побачу, чи зможу я перемогти Pyth, але я не обіцяю.

Ось шістнадцятковий набір:

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-натискання клавіш. Цього можна досягти командою регулярного вираження та командою "Зробити 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", що є основною ідеєю для друку таблиці. Решта досить просто, просто уникаючи пробілів, де це можливо.
Асик

4

постійного струму , 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");}

Спробуйте в Інтернеті!

Напівгольф:

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.щось, але офіційно додано у 8. Ще краще було б скористатись командою norm Спробуйте в Інтернеті!
DJMcMayhem

У будь-якому випадку, як тільки ви :set ve=allзрозумієте, що ви можете зробити, а потім курсор переміститься в місця, де немає тексту, дозволяючи вам вставляти труби легше і копіювати / вставляти в потрібні місця, не A <esc>
скріплюючи

@ nmjcman101 g^AДякую, це врятувало мені 12 байт :)
Kritixi Lithos

@DJMcMayhem З певних причин використання норми, а потім збільшення числа не працює
Kritixi Lithos

3

V , 130 120 99 байт

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

Ви можете точно зберегти деякі байти рішень Pбуде printf(, як показано тут: repl.it/JBRD
Захарі

І видаливши пробіл у четвертому рядку.
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ý

434 видалив непотрібний пробіл. Ваша пропозиція знижує його до 425. Дякую!
xirt

Ви можете додати примітку про те, що 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 і !).
NoOneIs Here

@SeeOneRhino: Ви явно не звертаєте уваги на код. Я змінив код посилання після вставки тут, намагаючись ще більше пограти в нього, але мені це не вдалося. Я просто перейшов на сторінку зараз і прокоментував свою невдалу спробу і переставив код звідси; Якщо ви перейдете туди зараз, ви побачите код точно рівний, і ви побачите, що він правильно друкує речі!
серхіол

Вибачте, я не побачив вашу редакцію посилання. Я припускав, що код той самий, що ви тут розмістили.
NoOneIs Here

Без проблем, я був з моєї вини
sergiol

@SeeOneRhino: Я досяг цього! Я перевершив себе!
серхіол

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 s цей масив разом для створення заголовків. Друга - це просто пряме множення рядків.

Третя лінія перебирає 32..63і кожна ітерація відправляє три значення $_, ($_+32)і ($_+64)у внутрішньому циклі. Внутрішній цикл робить значення "a PadRight" (додає 5символи до відповідних пробілів ). Тоді рядок, з'єднаний +з результатом вкладеного псевдотерміналу ( )[ ]. Псевдотермінал вибирає або charпредставлення цього числа, або інше, Spaceабо DELякщо це відповідне значення. Знову миPadRight відповідні персонажі.

Ці три рядки (наприклад, 32 Space, 64 @, 96 `) укладені в круглі дужки і -joinред з маркерами стовпців в один рядок. Кожен із цих 32 рядків залишається на конвеєрі. В кінці виконання неявна імплементація Write-Outputвставляє нову лінію між елементами трубопроводу, тому ми отримуємо це безкоштовно.


1

Perl, 165 155 байт

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

1

Пітон 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варто в байті, який би врятували права кількість чисел та символів.


На мою думку, краще виглядає з тим же числом байтів. Спробуйте в Інтернеті!
Йорг Гюльсерманн


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

Спробував кілька варіацій, включаючи заміну різних загальних рядків іншими змінними, але це була найкоротша версія, яку я знайшов.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.