Odtwórz tabelę ASCII jako tabelę ASCII


26

Często podczas gry w golfa chcę wiedzieć, jaka jest wartość ASCII pewnej postaci. Jednym z moich ulubionych zasobów do szybkiego wyszukiwania wszystkich drukowanych znaków ASCII jest ASCIItable.com . To naprawdę fajny obraz, który pokazuje nie tylko drukowalne znaki ASCII i ich wartości, ale także niedrukowalne i rozszerzone znaki oraz wartości w formacie szesnastkowym, ósemkowym i HTML:

wprowadź opis zdjęcia tutaj

Dzisiejsze wyzwanie polega na odtworzeniu tej tabeli ASCII jako tabeli ASCII zamiast obrazu. Aby uprościć sprawę, nie będziemy używać znaków kontrolnych (znaki poniżej 32) i pokażemy tylko wartość dziesiętną i znak. Innymi słowy, Twoim wyzwaniem jest napisanie pełnego programu lub funkcji, która drukuje lub zwraca następujący tekst:

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

Końcowe spacje w każdej linii i końcowy znak nowej linii są dozwolone. Ponieważ jest to wyzwanie , Twoje zgłoszenie nie może przyjmować żadnych danych wejściowych ani uzyskiwać dostępu do żadnych zasobów zewnętrznych (takich jak plik lub sieć), a Twoim celem jest skompresowanie kodu w celu uzyskania jak największej ilości tego tekstu.

Obowiązują standardowe luki, a najkrótsza odpowiedź w bajtach wygrywa. Miłej gry w golfa!


3
Mam dokładnie ten obraz tabeli ASCII na ścianie ... W każdym razie, czy można zwrócić listę linii?
FlipTack,

2
@fliptack Oczywiście, że możesz. Dlaczego nie miałbym pozwolić na coś zupełnie rozsądnego?
DJMcMayhem

10
Nie powiedziałbym, że to duplikat - drugi wymaga wartości szesnastkowych, nazw niedrukowalnych i ma inny format tabeli. Jest to zgodne z widocznym kodem ASCII i pozwala na kod golfisty, nie pytając o trzyliterowe kody wszystkich niedrukowalnych znaków.
FlipTack,

@FlipTack Nadal ma spację i DEL
Simon

2
@gurka tak, ale ten drugi ma każdy znak kontrolny.
FlipTack,

Odpowiedzi:


11

Python 2, 185 183 175 159 bajtów

Zaoszczędź 8 bajtów dzięki FlipTack!

Wciąż całkiem nowa gra w golfa w Pythonie.

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]

Używa zagnieżdżonej listy do wygenerowania treści tabeli.

Nie golfowany:

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]

Stara próba, 185 183 175 bajtów

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]

Nie golfowany:

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]

Widzę spację w `for l in (i, 32 + i, 64 + i)])`, można usunąć, aby zapisać jeden bajt.
maxb

6

Befunge, 176 172 bajtów

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

| DEL

Wypróbuj online!



5

JavaScript (ES6), 179 173 bajtów

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


Niezła odpowiedź! Możesz zaoszczędzić jeszcze jeden bajt, zastępując `${x='Dec Chr '}| ${x}| ${x}na końcu wiersza 2 (x='Dec Chr ')+(' |'+x)*2+`
słowem

@ L.Serné Nie znam żadnej wersji ECMAScript, która powtarzałaby ciąg z *operatorem. A może w jakiś sposób źle rozumiem twoją sugestię?
Arnauld

Ups, mój zły. To dostajesz za próbę gry w golfa w python, a następnie javascript.
Łukasz

5

V , 98, 96 , 94 bajtów

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

Wypróbuj online!

Wystarczy ledwo piszczenie w czasie krótszym niż sto. Zobaczę, czy dam radę pokonać Pytha, ale nie złożę żadnych obietnic.

Oto zrzut heksowy:

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

A oto jak to działa:

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

Tutaj jest ciekawie. Najpierw wyjaśnię sztuczkę vim. W trybie wstawiania niektóre znaki są wstawiane (wszystkie drukowane znaki ASCII, większość niezmapowanych znaków powyżej 0x7fi kilka innych), ale inne znaki mają efekt uboczny. Na przykład 0x1b( <esc>) przejdzie do trybu normalnego. 0x01( <C-a>) ponownie wstawi ostatni wstawiony tekst itp. Czasami chcemy wstawić te znaki dosłownie. Aby wstawić dosłowny znak zmiany znaczenia, musisz wpisać <C-v><esc>. Działa to dla wszystkich postaci, które mają efekt uboczny. Zasadniczo <C-v>jest to odpowiednik odwrotnego ukośnika w językach z literałami ciągów, które pozwalają ci uciec się od niektórych znaków w ciągu.

Inną przydatną sztuczką <C-v>w trybie wstawiania jest to, że można go używać do wstawiania znaków według punktu kodowego , w formacie dziesiętnym, szesnastkowym, ósemkowym lub szesnastkowym. Ponieważ mamy już liczby odpowiadające pewnym wartościom ASCII, musimy po prostu wstawić <C-v>przed tymi znakami i uruchomić odpowiedni tekst jako naciśnięcia klawiszy vim. Można to osiągnąć za pomocą polecenia regex i polecenia „Do 'x' w każdej linii”. Więc my:

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

W tym momencie bufor wygląda następująco

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       

Teraz potrzebujemy tylko ogólnego czyszczenia, które odpowiada za większość bajtów w tej odpowiedzi

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 bajty

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

Wypróbuj online!


Czy mogę poprosić o wersję bez golfa? Jestem naprawdę nowy w nauce języka F # i chciałbym właściwie zrozumieć, jak to zrobiłeś!
Ciaran_McCarthy

1
Pierwszy wiersz łączy dwie funkcje z nazwami jednoznakowymi. Teraz, jeśli to zrobisz ["ab"; "cd"] |> c |> p, połączy się to z „|” znaków i drukuje je, np. „ab | cd”, który jest podstawowym pomysłem na wydruk tabeli. Reszta jest dość prosta, w miarę możliwości unikając białych znaków.
Asik,

4

dc , 167 bajtów

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

Wypróbuj online!

Jak to działa:

[[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 bajtów

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

Uruchom z -Eflagą:

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

-2 bajty dzięki @GB .


Jeśli rozumiem trochę Perla, może możesz wyciąć 2 spacje, używając „% -5s” zamiast „% -3s” (nawiasem mówiąc, to właśnie robię w ruby)
GB

3

C, 179 bajtów

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

Wypróbuj online!

Częściowo nie golfowy:

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

Rubin, 124 bajty

 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 125 bajtów

12 bajtów zapisanych dzięki @ nmjcman101 do używania <C-v>g<C-a>liczb zamiastline('.')

2 bajty zapisane dzięki @DJMcMayhem do usuwania linii z wiodącymi spacjami za pomocą ÇÓ/di za pomocą do usuwania dodatkowych spacji i przestawiania rzeczy

Ta odpowiedź konkuruje z odpowiedzią V @ nmjcman101 (która wykorzystuje :set ve=all). Ale teraz znalazłem sposób, aby usunąć te A ^[i zaoszczędzić trochę bajtów, a my jesteśmy na parzystej liczbie bajtów

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

Wypróbuj online!

Hexdump:

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

Wyjaśnienie (niekompletne i nieaktualne)

Strategia polega na tym, że używam numerów linii do generowania punktów kodowych ASCII.

Uwaga: ^[jest 0x1b, ^VjestC-v

Najpierw generujemy wszystkie postacie.

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

Bieżący bufor wygląda

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

Teraz wstawiamy nową linię między tymi znakami

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

Oto kropla zamiast 32 SPACE ... 127 DELczęści kodu: Wypróbuj online! Używa tej schludnej rzeczy, w której możesz podświetlić kilka liczb, a następnie g^Asprawia, że ​​jest to rosnąca sekwencja (nowa w Vimie 8?)
nmjcman101

@ nmjmcman101 Tak, został dodany w 7.4. coś, ale oficjalnie został dodany w 8. Jeszcze lepiej byłoby użyć polecenia norm Wypróbuj online!
DJMcMayhem

Tak czy inaczej, kiedy już to zrobisz, :set ve=alla następnie kursor przesunie się w miejsca, w których nie ma tekstu, umożliwiając łatwiejsze wstawianie rur i kopiowanie / wklejanie w miejscach, w których potrzebujesz, bez A <esc>
rozsypywania

@ nmjcman101 Re g^Adzięki, uratowało mi to 12 bajtów :)
Kritixi Lithos

@DJMcMayhem Z jakiegoś powodu używanie norm, a następnie zwiększanie liczb nie działa
Kritixi Lithos

3

V , 130 120 99 bajtów

Klub Sub 100. Nie jestem już przekonany, że :se ve=allto najlepszy sposób na zrobienie tego. To dodatkowe ... 11 bajtów tylko do pisania |! Ale to właśnie mam.

Publikuję to prawie konkurując z odpowiedzią @KritixiLuthos, :se ve=allaby uniknąć niektórych A <esc>. Nie jestem przekonany, że którakolwiek z metod jest jeszcze lepsza, więc mam nadzieję, że może to zainspirować niektórych graczy w golfa i zobaczyć, która z metod jest lepsza.

W połowie spodziewam się, że @DJMcMayhem skopie nam oba spodnie

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

Wypróbuj online!

Hexdump dla ciekawskich (jeśli będzie zainteresowanie, po prostu zmienię to na blok ukrytych znaków w stylu 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
Globalne dowodzenie można skrócić o całkiem „ale”. Po pierwsze, ddjest to domniemane, jeśli po prostu to zrobisz d. Możesz także zrobić <M-s>to, co zawsze jest równoważne z \sregex. Więc można skrócić go na adres: ç^ó*/d. Ale jeśli zmienisz globalne polecenie dla odwrotności, :g!możesz wyszukać każdą linię, która nie pasuje do znaku niebiałego. ÇÓ/dco jest równoważne:g!/\S/normal dd
DJMcMayhem

3

AWK , 200 bajtów

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

Sformatowany:

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

Wypróbuj online!


2

C 188 bajtów

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

Zwykle wygląda to tak:

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 bajtów)

Dodano nowe linie dla przejrzystości.

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

Możesz zdecydowanie zaoszczędzić niektóre bajty, wykonując Pbe printf(, jak pokazano tutaj: repl.it/JBRD
Zacharý

I usuwając spację w czwartej linii.
Zacharý

2

Java, 434 422 321 bajtów

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 prawdopodobnie nie jest najlepszym językiem do tego celu, ponieważ istnieje narzut klas i główna metoda ...

Główną metodę można wyeliminować za pomocą deklaracji statycznej, co dodatkowo zmniejsza odliczanie bajtów:

class A{
    static{...}

ale powoduje to błąd (po pomyślnym uruchomieniu):

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

Liczba bajtów int obejmuje znaki nowej linii lub wcięcia.


Nie sądzę, żebyś potrzebował spacji później void main(){, ani pomiędzy while(s.length()<5)i s+=" ". (Chyba że nie policzyłeś tego w liczbie bajtów). I można zaoszczędzić kilka bajtów, zmieniając d="Dec",c="Chr"się d=p("Dec"),c=p("Chr")i podejmowania zmieniając połączeń p(d)i p(c)do da c.
Zacharý

434 usuwał wszystkie niepotrzebne białe znaki. Twoja sugestia sprowadza ją do 425. Dzięki!
xirt

Może chciałbym dodać do odpowiedzi notatkę o 434 bez zbędnych białych znaków
Zacharý

Gotowy. Uwaga: program znacznie się zmienił od tego czasu (jeszcze bardziej zmniejszył), więc powyższe komentarze mogą już nie być odpowiednie
xirt

2

Tcl , 233 bajty

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

Wypróbuj online!


Uruchomiłem to i dostaję 32 na przykład („zamiast” Space) i 33!(bez spacji pomiędzy 33 i !).
NoOneIsHere

@SeeOneRhino: Najwyraźniej nie zwracasz uwagi na kod. Zmodyfikowałem kod linku po wklejeniu tutaj, próbując go jeszcze bardziej pograć w golfa, ale jeszcze mi się nie udało. Po prostu poszedłem teraz na stronę i skomentowałem moją nieudaną próbę i ponownie przełożyłem kod z tego miejsca; jeśli teraz tam przejdziesz, zobaczysz kod dokładnie równy i zobaczysz, że drukuje wszystko poprawnie!
sergiol

Przykro mi, nie widziałem Twojej edycji linku. Założyłem, że kod jest taki sam jak ten, który tu opublikowałeś.
NoOneIsHere

Nie ma problemu, to moja wina
sergiol

@SeeOneRhino: Udało mi się! Otworzyłem się!
sergiol

2

R , 235 228 221 212 bajtów

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

Wypróbuj online!

Bardzo się starałem, aby uzyskać mniej niż 200 bajtów, ale te pastei collapsemnie zabijają. Zwraca listę wierszy.


1

JavaScript (ES6), 258 bajtów

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 bajtów

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

Wypróbuj online!

Pierwsze dwa wiersze tworzą dosłowne ciągi znaków i pozostawiają je w potoku. Pierwszy używa operatora przecinka ,do utworzenia tablicy, a następnie -joins tej tablicy razem, aby utworzyć nagłówki. Drugi to zwykłe mnożenie ciągów.

Trzeci wiersz iteruje 32..63i każdej iteracji wysyła trzy wartości $_, ($_+32)i ($_+64)do wewnętrznej pętli. Wewnętrzna pętla wykonuje PadRightwartość na (dodaje odpowiednie spacje, aby wstawić 5znaki). Jest to następnie łańcuch łączony +z wynikiem zagnieżdżonego pseudo-trójskładnika ( )[ ]. Wybierze pseudo-trójargumentowy albo charreprezentacja tego numeru, albo Spacealbo DELczy jest to odpowiednia wartość. Znów mamy PadRightodpowiednie postacie.

Te trzy kolumny (na przykład 32 Space, 64 @, 96 `) są zamknięte w parens i -joined z markerami kolumn w jednym ciągu. Każdy z tych 32 łańcuchów jest następnie pozostawiany w rurociągu. Pod koniec wykonania domyślnie Write-Outputwstawia nowy wiersz między elementami w potoku, więc otrzymujemy to za darmo.


1

Perl, 165 155 bajtów

$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 bajtów

Mój pierwszy golf, przepraszam za oczywiste błędy

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"

Wypróbuj online!

Jeśli zastanawiasz się, pierwsza wersja była ciągiem zakodowanym w standardzie base64.


@FlipTack Zmieniłem to na rzeczywiste rozwiązanie
sagiksp

Niepotrzebne białe znaki na ljust(6) for.
Yytsi

Kolejny o x in [. I IIRC nawiasy kwadratowe w środku joinmożna usunąć.
Yytsi

1

05AB1E , 82 76 bajtów

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

Wypróbuj online!

Wciąż gra w golfa, można to znacznie poprawić.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø wypycha wypełnione liczby odpowiednikiem tekstowym:

[['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… | ©ý} łączy je razem w tabeli:

['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×.Á.Á» dba o nagłówek tabeli:

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 bajtów

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

awaria

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

Używanie %-Njest warte bajtu, który zapisałyby prawe cyfry i znak.


Moim zdaniem wygląda lepiej z tą samą liczbą bajtów Wypróbuj online!
Jörg Hülsermann


0

T-SQL, 242 bajty

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

Sformatowany:

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

Próbowałem kilku odmian, w tym zastępując różne popularne ciągi innymi zmiennymi, ale była to najkrótsza wersja, jaką znalazłem.


0

Python 3 , 154 bajtów

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

Wypróbuj online!


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.