Ricrea la tabella ASCII come tabella ASCII


26

Spesso, mentre sto giocando a code-golf, voglio sapere qual è il valore ASCII di un determinato personaggio. Una delle mie risorse preferite per cercare rapidamente tutti i caratteri ASCII stampabili è ASCIItable.com . Questa ha un'immagine davvero piacevole che mostra non solo i caratteri ASCII stampabili e i loro valori, ma anche i caratteri non stampabili ed estesi e i valori in esadecimale, ottale e HTML:

inserisci qui la descrizione dell'immagine

La sfida di oggi è quella di ricreare quella tabella ASCII come tabella ASCII anziché come immagine. Per semplificare le cose, non useremo i caratteri di controllo (caratteri inferiori a 32) e mostreremo solo il valore decimale e il carattere. In altre parole, la tua sfida è scrivere un programma completo o una funzione che stampa o restituisce il seguente testo:

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

Sono consentiti spazi finali su ciascuna riga e una riga finale finale. Poiché si tratta di una , la tua proposta potrebbe non accettare alcun input o accedere a risorse esterne (come un file o il Web) e il tuo obiettivo è comprimere il codice per generare il più possibile questo testo.

Si applicano scappatoie standard e vince la risposta più breve in byte. Buon golf!


3
Ho l'immagine esatta della tabella ASCII bloccata sul mio muro ... Comunque, è possibile restituire un elenco di righe?
FlipTack

2
@fliptack Certo che puoi. Perché non dovrei permettere qualcosa di perfettamente ragionevole come quello?
DJMcMayhem

10
Non direi che questo è un duplicato: l'altro richiede valori esadecimali, nomi di non stampabili ed è un formato di tabella diverso. Questo si attacca all'ASCII visibile e consente il codice golfista non chiedendo i codici di 3 lettere di tutti gli non stampabili.
FlipTack

@FlipTack Ha ancora Space e DEL
simon

2
@gurka sì, ma l'altro ha ogni singolo carattere di controllo.
FlipTack

Risposte:


11

Python 2, 185 183 175 159 byte

8 byte salvati grazie a FlipTack!

Ancora abbastanza nuovo per giocare a golf in 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]

Utilizza una comprensione di elenco nidificata per generare il corpo della tabella.

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]

Vecchio tentativo, 185 183 175 byte

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

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]

Vedo uno spazio in `for l in (i, 32 + i, 64 + i)])`, potrebbe essere rimosso per salvare un byte.
max

6

Befunge, 176 172 byte

<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

Provalo online!



5

JavaScript (ES6), 179 173 byte

f=n=>n?(n>>6?' | ':`
`)+n+(99<n?'  ':'   ')+(126<n?'DEL':String.fromCharCode(n)+'    '+f(n>95?n-63:n+32)):`${x='Dec  Chr   '}| ${x}| ${x}
${'-'.repeat(34)}
32   Space`+f(64)

console.log(f())


Bella risposta! Puoi salvare un altro byte sostituendolo `${x='Dec Chr '}| ${x}| ${x}alla fine della riga 2 con(x='Dec Chr ')+(' |'+x)*2+`
Luca

@ L.Serné Non conosco nessuna versione di ECMAScript che possa ripetere una stringa con l' *operatore. O sto in qualche modo fraintendendo il tuo suggerimento?
Arnauld

Oops, mia cattiva. Ecco cosa ottieni provando a golf una soluzione Python e quindi JavaScript.
Luca

5

V , 98, 96 , 94 byte

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

Provalo online!

Appena cigolando a malapena in meno di un centinaio. Vedrò se riesco a battere Pyth, ma non farò promesse.

Ecco un 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

Ed ecco come funziona:

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

Qui è dove diventa interessante. Prima di tutto, lascia che ti spieghi un trucco virtuale. Nella modalità di inserimento, vengono inseriti determinati caratteri (tutti i caratteri ASCII stampabili, la maggior parte dei caratteri non mappati sopra 0x7fe alcuni altri), ma altri caratteri hanno un effetto collaterale. Ad esempio, 0x1b( <esc>) passerà alla modalità normale. 0x01( <C-a>) reinserirà l'ultimo testo inserito, ecc. A volte, vogliamo inserire questi caratteri alla lettera. Quindi, per inserire un carattere di escape letterale, è necessario digitare <C-v><esc>. Funziona con tutti i personaggi che hanno un effetto collaterale. Quindi, in sostanza, <C-v>è l'equivalente di una barra rovesciata nelle lingue con valori letterali stringa che consentono di sfuggire a determinati caratteri in una stringa.

L'altro trucco utile con <C-v>in modalità di inserimento è che può essere utilizzato per inserire caratteri per punto di codice , in Unicode decimale, esadecimale, ottale o esadecimale. Dal momento che abbiamo già i numeri che corrispondono a determinati valori ASCII, dobbiamo solo mettere un <C-v>carattere prima di quei caratteri ed eseguire il testo corrispondente come tasti-tasto. Ciò può essere ottenuto con un comando regex e un comando "Esegui 'x' su ogni riga". Quindi noi:

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

A questo punto, il buffer si presenta così

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       

Ora abbiamo solo bisogno di un po 'di pulizia generale, che rappresenta la maggior parte dei byte in questa risposta

bsDEL<esc>              " Change the literal 0x7f character to "DEL"
          F <C-v>27kd   " Remove a space from the lines that have too many
H5l                     " Move to the first space character
   RSpace<esc>          " And replace it with "Space"
Ä                       " Duplicate this line
 Ò-                     " And replace it with '-'s
   Ä                    " Duplicate this line
    3R                  " And replace it with three copies of the following string:
      Dec  Chr³ | <esc> " 'Dec  Chr   | '

Î35|D                   " Remove all but the first 35 characters of each line

5

F #, 222 byte

let c,p=String.concat" | ",printfn"%s"
Seq.replicate 3"Dec  Chr  "|>c|>p
p(String.replicate 34"-")
for i=32 to 63 do[for j in[i;i+32;i+64]->sprintf"%-5d%-5s"j (match j with 32->"Space"|127->"DEL"|_->string(char j))]|>c|>p

Provalo online!


Posso chiedere una versione non modificata di questo per favore? Sono davvero nuovo nell'apprendimento di F # e mi piacerebbe capire correttamente come hai fatto!
Ciaran_McCarthy

1
La prima riga alias due funzioni per i nomi a carattere singolo. Ora se lo fai ["ab"; "cd"] |> c |> pconcatena con "|" caratteri e li stampa, come "ab | cd" che è l'idea di base per stampare il tavolo. Il resto è abbastanza semplice, evitando gli spazi bianchi ove possibile.
Asik,

4

dc , 167 byte

[[Space]nq]sp[[DEL]nq]sq[[ ]n]sc[Dec  Chr]dsen[   | ]dsfnlenlfnlen10P34[[-]n1-d0<a]dsax10P0[[32+dndZ2=c[  ]ndd32=pd127=qP[    ]n]dswx[ | ]nlwx[ | ]nlwx10P95-d32>b]dsbx

Provalo online!

Come funziona:

[[Space]nq]sp     # p is a macro that prints "Space" and then quits from the call one level up
[[DEL]nq]sq       # q is a macro that prints "DEL" and then quits from the call one level up
[[ ]n]sc          # c is a macro that prints a space
[Dec  Chr]dsen    # Save the string "Dec  Chr" in register e, and print it.
[   | ]dsfn       # Save the string "   | " in register f, and print it.
len               # Print "Dec  Chr" again.
lfn               # Print "   | " again.
len               # Print "Dec  Chr" again.
10P               # Print a newline.
34                # Push 34 on the stack.

[[-]n1-d0<a]dsa   # a is a macro that repeatedly prints "-" and decrements the top of the stack, while the top of the stack is positive.

x10P              # Execute macro a, followed by a newline. (This prints the line of hyphens.)

0                 # Push 0 on the stack.

[                 # Starting a large macro (which will be stored in register b) for printing the table row by row.

[32+dndZ2=c[  ]ndd32=pd127=qP[    ]n]dsw

                  # w is a macro which:
                        (1) adds 32 to the top of the stack;
                        (2) prints it as a number;
                        (3) uses Z to compute the number of characters the number required to print that number;
                        (4) if it required 2 characters to print the number, calls the macro c to print an extra space
                        (5) prints the string "Space" (for ASCII code 32) or the string "DEL" (for ASCII code 127) or the appropriate character, followed by the right number of spaces

x                 # Execute macro w to print an entry in column 1.
[ | ]n            # Print a column divider.
lwx               # Execute macro w to print an entry in column 2 (ASCII code 32 higher than the previous entry).
[ | ]n            # Print a column divider.
lwx               # Execute macro w to print an entry in column 3 (ASCII code 32 higher than the previous entry).

10P               # Print a newline.
95-               # Subtract 95 to adjust to go to the beginning of the next line.

d32>b             # If the top of stack is <= 32, execute macro b again, effectively looping to print all the rows of the table.

]dsb              # End the definition of the large macro, and store it in register b.

x                 # Execute the macro that's in b (with 0 at the top of the stack initially).

4

Perl, 120 byte

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

Esegui con -Ebandiera:

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

-2 byte grazie a @GB .


Se capisco un po 'di Perl, forse puoi tagliare 2 spazi usando "% -5s" invece di "% -3s" (per inciso, questo è quello che faccio in ruby)
GB

3

C, 179 byte

i;f(){for(;i++<37;)printf(i<4?"Dec  Chr%s":"-",i<3?"   | ":"\n");printf("\n32   Space | ");for(i=64;i<127;i+=i>95?-63:32)printf("%-5d%-6c%s",i,i,i>95?"\n":"| ");puts("127  DEL");}

Provalo online!

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

Rubino, 124 byte

 puts [["Dec  Chr   "]*3*"| ",?-*34,(0..31).map{|d|(1..3).map{|x|"%-5s%-6s"%[y=x*32+d,y<33?"Space":y>126?"DEL":y.chr]}*"| "}]

3

V , 151 150 148 136 135 130 129 125 byte

12 byte salvati grazie a @ nmjcman101 per l'utilizzo <C-v>g<C-a>per i numeri anzichéline('.')

2 byte salvati grazie a @DJMcMayhem per la rimozione di linee con spazi iniziali usando ÇÓ/de usando per rimuovere spazi extra e riordinare le cose

Questa risposta è in concorrenza con la risposta V di @nmjcman101 (che utilizza :set ve=all). Ma ora, ho trovato un modo per rimuovere quelle se ho A ^[salvato alcuni byte e siamo a un prezzo pari

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

Provalo 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 

Spiegazione (incompleta e obsoleta)

La strategia qui è che sto usando i numeri di riga per generare i punti di codice ASCII.

Nota: ^[è 0x1b, ^VèC-v

Innanzitutto generiamo tutti i personaggi.

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

Il buffer corrente è simile

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

Ora inseriamo una nuova riga tra questi personaggi

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

Ecco un calo in sostituzione della 32 SPACE ... 127 DELparte del codice: provalo online! Usa quella cosa ordinata in cui puoi evidenziare un mucchio di numeri, e poi lo g^Arende una sequenza crescente (nuova in Vim 8?)
nmjcman101

@ nmjmcman101 Sì, è stato aggiunto in 7.4.qualcosa, ma ufficialmente aggiunto in 8. Ancora meglio sarebbe usare il comando norm Provalo online!
DJMcMayhem

Ad ogni modo, una volta ottenuto che puoi fare un :set ve=alle quindi il cursore si sposterà in punti in cui non c'è testo, permettendoti di inserire i tubi più facilmente e di copiare / incollare nei luoghi che devi fare senza spruzzare A <esc>ovunque
nmjcman101

@ nmjcman101 g^AGrazie, mi ha salvato 12 byte :)
Kritixi Lithos

@DJMcMayhem Per qualche ragione, usare la norma e quindi aumentare i numeri non funziona
Kritixi Lithos

3

V , 130 120 99 byte

Sub 100 club. Non sono più convinto che :se ve=allsia il modo migliore per farlo. È un extra ... 11 byte solo per scrivere |! Ma è quello che ho.

Sto pubblicando questo quasi in concorrenza con la risposta di @KritixiLuthos usando :se ve=allper evitare alcuni A <esc>. Non sono convinto che entrambi i metodi siano ancora migliori, quindi spero che questo possa ispirare un po 'di golf su entrambe le parti e vedere quale metodo prende la torta.

Mi aspetto anche metà @DJMcMayhem di calciare entrambi i pantaloni

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

Provalo online!

Hexdump per i curiosi (se c'è interesse, lo cambierò in un blocco di caratteri nascosto in stile 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
Il comando globale potrebbe essere abbreviato da un bel ma. Per uno, ddè implicito se lo fai e basta d. Puoi anche fare ciò <M-s>che è sempre equivalente a \sin regex. Così si potrebbe accorciare a: ç^ó*/d. Ma se si cambia il comando globale per l'inverso, :g!è possibile cercare ogni riga che non corrisponde a un carattere non bianco. ÇÓ/dche equivale a:g!/\S/normal dd
DJMcMayhem

3

AWK , 200 byte

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

formattato:

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

Provalo online!


2

C 188 byte

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

Di solito si presenta così:

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

2

C (249 byte)

Newline aggiunti per chiarezza.

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

Si può sicuramente risparmiare un po 'di byte, rendendo Pessere printf(, come illustrato di seguito: repl.it/JBRD
Zachary

E rimuovendo lo spazio sulla quarta riga.
Zacharý,

2

Java, 434 422 321 byte

class A{public static void main(String[]a){
    int k=1,r,s=32;
    for(;k<4;k++)
        o("Dec   Chr  ",k);
    for(;k<37;k++)                                                                              
        o("-",k==36?3:4);
    for(k=r=s;!(k==64&&r==-63);r=k>95?-63:s,k+=r)
        o(k+"   "+((k>99)?"":" ")+(k==s?"Space":k==127?"DEL  ":((char)k+"    ")),k/s);
    }
    static void o(String s,int j){
        System.out.print(s+(j==4?"":j==3?"\n":"|"));
    }
}

Java non è probabilmente il miglior linguaggio per questo in quanto vi è il sovraccarico di classi e metodo principale ...

È possibile eliminare il metodo principale utilizzando una dichiarazione statica, riducendo ulteriormente il conteggio dei byte:

class A{
    static{...}

ma ciò si traduce in un errore (in caso contrario eseguito correttamente):

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

Il conteggio dei byte include int nuove righe o rientri.


Non penso che tu abbia bisogno di uno spazio dopo void main(){, e nemmeno tra while(s.length()<5)e s+=" ". (A meno che non lo abbia contato nel conteggio dei byte). E puoi salvare qualche byte cambiando d="Dec",c="Chr"in d=p("Dec"),c=p("Chr")e facendo cambiare le tue chiamate p(d)e p(c)in de c.
Zacharý,

Il 434 stava rimuovendo tutti gli spazi bianchi non necessari. Il tuo suggerimento lo porta a 425. Grazie!
xirt,

Potrebbe voler aggiungere una nota sul 434 senza spazi bianchi non necessari nella risposta
Zacharý,

Fatto. Nota: il programma è notevolmente cambiato da (ulteriormente ridotto), quindi i commenti sopra potrebbero non essere più pertinenti
xirt

2

Tcl , 233 byte

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

Provalo online!


Ho eseguito questo e ottengo 32 ad esempio (un '' invece di Space) e 33!(nessuno spazio tra 33 e !).
NoOneIsHere

@SeeOneRhino: chiaramente non stai prestando attenzione al codice. Ho modificato il codice del link dopo averlo incollato qui, nel tentativo di giocarlo ancora di più, ma non ci sono ancora riuscito. Sono appena andato alla pagina ora e ho commentato il mio tentativo fallito e ho ripetuto il codice da qui; se ci vai ora, vedrai il codice esattamente uguale e lo vedrai stampare le cose bene!
sergiol

Mi dispiace, non ho visto la tua modifica al link. Supponevo che il codice fosse lo stesso di quello che avevi pubblicato qui.
NoOneIsHere

Nessun problema, è stata colpa mia
sergiol

@SeeOneRhino: l'ho raggiunto! Mi sono superato!
sergiol

2

R , 235 228 221 212 byte

y=apply(rbind(rep("Dec  Chr  ",3),1,matrix(sapply(1:96,function(i)paste(i+31,rep(" ",i<69),"if"(i<2,"Space","if"(i>95,"DEL",intToUtf8(c(i+31,rep(32,4))))))),nrow=32)),1,paste,collapse=" | ")
y[2]=strrep("-",34)
y

Provalo online!

Ho cercato davvero di ottenere meno di 200 byte, ma questi pastee collapsemi stanno uccidendo. Restituisce un elenco di righe.


1

JavaScript (ES6), 258 byte

a="Dec  Chr   | ".repeat(2)+"Dec  Chr\n"+"-".repeat(34);for(b=32;64>b;b++)a+="\n"+b+"   "+(32==b?"Space  ":String.fromCharCode(b)+"      ")+"| "+(b+32)+"   "+String.fromCharCode(b+32)+"     | "+(b+64)+(35<b?"  ":"   ")+(63==b?"DEL":String.fromCharCode(b+64))

console.log(a)

1

PowerShell , 159 byte

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

Provalo online!

Le prime due linee stanno solo creando stringhe letterali e lasciandole sulla pipeline. Il primo utilizza l'operatore virgola ,per creare un array, quindi -joins quell'array insieme per creare le intestazioni. Il secondo è solo una moltiplicazione di stringhe diritte.

La terza linea loop sopra 32..63e ogni iterazione invia tre valori $_, ($_+32)e ($_+64)in un ciclo interno. Il ciclo interno fa un PadRightvalore sul (aggiunge gli spazi appropriati per il pad ai 5caratteri). Questa è quindi una stringa concatenata +con il risultato di una pseudo-ternaria nidificata ( )[ ]. Lo pseudo-ternario seleziona la charrappresentazione di quel numero, Spaceoppure DELse è il valore appropriato. Ancora una volta, abbiamo PadRighti personaggi appropriati.

Quei tre corde (per esempio, 32 Space, 64 @, 96 `) sono incapsulati in parentesi e -joinED con gli indicatori di colonna in una singola stringa. Ciascuna di queste 32 stringhe viene quindi lasciata sulla tubazione. Alla fine dell'esecuzione, un implicito Write-Outputinserisce una nuova riga tra gli elementi della pipeline, quindi la otteniamo gratuitamente.


1

Perl, 165 155 byte

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

1

Python 2, 1564 218 byte

Il mio primo golf, scusami per gli ovvi errori

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"

Provalo online!

Nel caso ti stia chiedendo, la prima versione era una stringa codificata in base64.


@FlipTack È stato modificato in una soluzione reale
sagiksp, il

Spazi bianchi non richiesti a ljust(6) for.
Yytsi

Un altro a x in [. E IIRC le parentesi quadre all'interno joinpossono essere eliminate.
Yytsi,

1

05AB1E , 82 76 byte

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

Provalo online!

Sempre giocando a golf, questo può essere migliorato molto.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø spinge i numeri imbottiti con testo equivalente:

[['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… | ©ý} li unisce nel tavolo:

['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×.Á.Á» si occupa della parte dell'intestazione della tabella:

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

1

PHP, 163 149 147 byte

<?=($p=str_pad)(D,31,"ec Chr   | D"),$p("
",32,"-");whhile($i<96)printf("%s%-4d%-6s",$i%3?"| ":"
",$o=$i%3*32+32+$i/3,$i++?$i<96?chr($o):DEL:Space);

abbattersi

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

L'utilizzo %-Nvale il byte che salverebbe numeri e caratteri a destra.


Secondo me sembra migliore con lo stesso numero di byte Provalo online!
Jörg Hülsermann,


0

T-SQL, 242 byte

DECLARE @ INT=32PRINT'Dec  Chr   | Dec  Chr   | Dec  Chr
'+REPLICATE('-',34)L:PRINT CONCAT(@,'   ',IIF(@=32,'Space | ',CHAR(@)+'     | '),@+32,'   ',CHAR(@+32),'     | ',@+64,SPACE(5-LEN(@+64)),IIF(@=63,'DEL',CHAR(@+64)))SET @+=1IF @<64GOTO L

formattato:

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

Ho provato alcune varianti, inclusa la sostituzione di varie stringhe comuni con altre variabili, ma questa è stata la versione più breve che ho trovato.


0

Python 3 , 154 byte

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

Provalo online!


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.