Recréer la table ASCII en tant que table ASCII

26

Souvent, pendant que je joue au code, je veux savoir quelle est la valeur ASCII d'un certain caractère. ASCIItable.com est l' une de mes ressources préférées pour rechercher rapidement tous les caractères ASCII imprimables . Cela a une image vraiment sympa qui montre non seulement les caractères ASCII imprimables et leurs valeurs, mais aussi les caractères non imprimables et étendus, et les valeurs en hexadécimal, octal et HTML:

entrez la description de l'image ici

Le défi d'aujourd'hui est de recréer cette table ASCII en tant que table ASCII au lieu d'une image. Pour simplifier les choses, nous n'utiliserons pas de caractères de contrôle (caractères inférieurs à 32) et nous afficherons uniquement la valeur décimale et le caractère. En d'autres termes, votre défi consiste à écrire un programme complet ou une fonction qui imprime ou renvoie le texte suivant:

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

Les espaces de fin sur chaque ligne et une nouvelle ligne de fin sont autorisés. Comme il s'agit d'un , votre soumission ne peut prendre aucune entrée, ni accéder à des ressources externes (comme un fichier ou le Web), et votre objectif est de compresser le code pour afficher autant que possible ce texte.

Les failles standard s'appliquent et la réponse la plus courte en octets l'emporte. Bon golf!

DJMcMayhem
la source
3
J'ai cette image exacte du tableau ASCII collée sur mon mur ... Quoi qu'il en soit, une liste de lignes peut-elle être retournée?
FlipTack
2
@fliptack Bien sûr que vous le pouvez. Pourquoi ne permettrais-je pas quelque chose de parfaitement raisonnable comme ça?
DJMcMayhem
10
Je ne dirais pas que c'est une dupe - l'autre nécessite des valeurs hexadécimales, des noms non imprimables et un format de table différent. Cela colle à l'ASCII visible et permet au code du golfeur en ne demandant pas les codes à 3 lettres de tous les non imprimables.
FlipTack
@FlipTack Il a toujours de l'espace et DEL
Simon
2
@gurka oui, mais l'autre a tous les caractères de contrôle.
FlipTack

Réponses:

11

Python 2, 185 183 175 159 octets

8 octets enregistrés grâce à FlipTack!

Encore assez nouveau pour jouer au golf en 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]

Utilise une compréhension de liste imbriquée pour générer le corps du tableau.

Non golfé:

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]

Ancienne tentative, 185 183 175 175 octets

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]

Non golfé:

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]
busukxuan
la source
Je vois un espace à `pour l dans (i, 32 + i, 64 + i)])`, pourrait être supprimé pour enregistrer un octet.
maxb
6

Befunge, 176 172 octets

<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

Essayez-le en ligne!

James Holderness
la source
6

Pyth, 89 85 79 77 octets

PP*"Dec  Chr   | "3*\-34V32PPsm++.[`=+N32;5.[?qN32"Space"?qN127"DEL"CN;6"| "3

Essayez-le en ligne!

insert_name_here
la source
5

JavaScript (ES6), 179 173 octets

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

Arnauld
la source
Bonne réponse! Vous pouvez enregistrer un octet de plus en remplaçant `${x='Dec Chr '}| ${x}| ${x}à la fin de la ligne 2 par(x='Dec Chr ')+(' |'+x)*2+`
Luke
@ L.Serné Je ne connais aucune version d'ECMAScript qui répéterait une chaîne avec l' *opérateur. Ou suis-je en quelque sorte mal compris votre suggestion?
Arnauld
Oups, mon mauvais. C'est ce que vous obtenez en essayant de jouer au golf avec une solution python, puis en javascript.
Luke
5

V , 98, 96 , 94 octets

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

Essayez-le en ligne!

Juste à peine grincement en moins d' une centaine. Je vais voir si je peux battre Pyth, mais je ne ferai aucune promesse.

Voici 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

Et voici comment cela fonctionne:

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

Voici où ça devient intéressant. Tout d'abord, permettez-moi d'expliquer un vim-trick. En mode insertion, certains caractères sont insérés (tous les caractères ASCII imprimables, la plupart des caractères non mappés ci 0x7f- dessus et quelques autres), mais d'autres caractères ont un effet secondaire. Par exemple, 0x1b( <esc>) échappera au mode normal. 0x01( <C-a>) réinsérera le dernier texte inséré, etc. Parfois, nous voulons insérer ces caractères littéralement. Donc, pour insérer un caractère d'échappement littéral, vous devez taper <C-v><esc>. Cela fonctionne pour tous les personnages qui ont un effet secondaire. Donc, essentiellement, <C-v>c'est l'équivalent d'une barre oblique inversée dans les langues avec des littéraux de chaîne qui vous permettent d'échapper certains caractères dans une chaîne.

L'autre astuce utile <C-v>en mode insertion est qu'il peut être utilisé pour insérer des caractères par point de code , en décimal, hexadécimal, octal ou hexadécimal Unicode. Puisque nous avons déjà les nombres qui correspondent à certaines valeurs ASCII, nous avons juste besoin de mettre un <C-v>avant ces caractères et d'exécuter le texte correspondant sous forme de touches vim. Cela peut être réalisé avec une commande regex et une commande "Do 'x' sur chaque ligne". Alors on:

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

À ce stade, le tampon ressemble à ceci

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       

Maintenant, nous avons juste besoin d'un nettoyage général, qui représente la plupart des octets de cette réponse

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
DJMcMayhem
la source
5

F #, 222 octets

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

Essayez-le en ligne!

Asik
la source
Puis-je demander une version non golfée de ceci s'il vous plaît? Je suis vraiment nouveau dans l'apprentissage du F #, et j'aimerais bien comprendre comment vous avez fait ça!
Ciaran_McCarthy
1
La première ligne alias deux fonctions aux noms à un seul caractère. Maintenant, si vous le faites, ["ab"; "cd"] |> c |> pil concatène avec "|" caractères et les imprime, comme "ab | cd" qui est l'idée de base pour imprimer le tableau. Le reste est assez simple, évitant simplement les espaces dans la mesure du possible.
Asik
4

DC , 167 octets

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

Essayez-le en ligne!

Comment ça marche:

[[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).
Mitchell Spector
la source
4

Perl, 120 octets

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

Courir avec le -Edrapeau:

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

-2 octets grâce à @GB .

Dada
la source
Si je comprends un peu Perl, vous pouvez peut-être couper 2 espaces en utilisant "% -5s" au lieu de "% -3s" (d'ailleurs, c'est ce que je fais en rubis)
GB
3

C, 179 octets

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

Essayez-le en ligne!

Semi-non golfé:

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");
}
Simon
la source
3

Rubis, 124 octets

 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]}*"| "}]
GB
la source
3

V , 151 150 148 136 135 130 129 129 125 octets

12 octets enregistrés grâce à @ nmjcman101 pour l'utilisation <C-v>g<C-a>des chiffres au lieu deline('.')

2 octets enregistrés grâce à @DJMcMayhem pour supprimer les lignes avec des espaces de début à l'aide ÇÓ/d et en utilisant pour supprimer les espaces supplémentaires et réorganiser les éléments

Cette réponse est en concurrence avec la réponse V de @ nmjcman101 (qui utilise :set ve=all). Mais maintenant, j'ai trouvé un moyen de supprimer ces A ^[s et enregistré quelques octets et nous sommes à un nombre d'octets égal

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

Essayez-le en ligne!

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 

Explication (incomplète et obsolète)

La stratégie ici est que j'utilise les numéros de ligne pour générer les points de code ASCII.

Remarque: ^[est 0x1b, ^VestC-v

Nous générons d'abord tous les personnages.

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

Le tampon actuel ressemble à

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

Maintenant, nous insérons une nouvelle ligne entre ces caractères

     Ó./&ò         " insert a newline before every character (:s/./&\r/g)
Kritixi Lithos
la source
Voici une goutte de remplacement pour la 32 SPACE ... 127 DELpartie de votre code: Essayez-le en ligne! Il utilise cette chose intéressante où vous pouvez mettre en évidence un tas de nombres, puis en g^Afait une séquence croissante (nouvelle dans Vim 8?)
nmjcman101
@ nmjmcman101 Oui, il a été ajouté dans 7.4.quelque chose, mais officiellement ajouté dans 8. Encore mieux serait d'utiliser la commande norm Essayez-le en ligne!
DJMcMayhem
Quoi qu'il en soit, une fois que vous obtenez que vous pouvez faire un :set ve=all, puis le curseur se déplacera dans des endroits où il n'y a pas de texte, vous permettant d'insérer les tuyaux plus facilement et de copier / coller dans les endroits dont vous avez besoin sans saupoudrer A <esc>partout
nmjcman101
@ nmjcman101 Re g^Amerci, cela m'a fait économiser 12 octets :)
Kritixi Lithos
@DJMcMayhem Pour une raison quelconque, utiliser la norme puis incrémenter les nombres ne fonctionne pas
Kritixi Lithos
3

V , 130 120 99 octets

Club de moins de 100. Je ne suis plus convaincu que:se ve=all c'est la meilleure façon de procéder. C'est un extra ... 11 octets rien que pour écrire les |! Mais c'est ce que j'ai.

Je poste cela presque en concurrence avec la réponse @KritixiLuthos en utilisant :se ve=allpour éviter certainsA <esc> . Je ne suis pas convaincu que l'une ou l'autre méthode soit encore meilleure, alors j'espère que cela peut inspirer un peu de golf sur les deux parties et voir quelle méthode prend le gâteau.

Je m'attends également à moitié à @DJMcMayhem pour botter nos deux pantalons

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

Essayez-le en ligne!

Hexdump pour les curieux (s'il y a un intérêt, je vais juste changer cela en un bloc de caractères cachés de style 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
nmjcman101
la source
1
La commande globale pourrait être raccourcie d'un certain mais. D'une part, le ddest implicite si vous le faites d. Vous pouvez également faire <M-s>ce qui est toujours équivalent à \sdans regex. Ainsi , vous pouvez réduire à: ç^ó*/d. Mais si vous désactivez la commande globale pour l'inverse, :g!vous pouvez rechercher chaque ligne ne correspondant pas à un caractère non blanc. ÇÓ/dce qui équivaut à:g!/\S/normal dd
DJMcMayhem
3

AWK , 200 octets

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

Formaté:

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

Essayez-le en ligne!

Steve
la source
2

C 188 octets

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

Ressemble normalement à ceci:

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");
}
Abel Tom
la source
2

C (249 octets)

Ajout de nouvelles lignes pour plus de clarté.

#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");}}
musarithmie
la source
Vous pouvez certainement enregistrer quelques octets en faisant Pbe printf(, comme indiqué ici: repl.it/JBRD
Zacharý
Et en supprimant l'espace sur votre quatrième ligne.
Zacharý
2

Java, 434 422 321 octets

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 n'est probablement pas le meilleur langage pour cela car il y a les frais généraux des classes et de la méthode principale ...

Vous pouvez éliminer la méthode principale à l'aide d'une déclaration statique, ce qui réduit davantage le décompte d'octets:

class A{
    static{...}

mais cela se traduit par une erreur (après une exécution réussie):

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

Le nombre d'octets n'inclut pas les sauts de ligne ou l'indentation.

xirt
la source
Je ne pense pas que vous ayez besoin d'un espace après void main(){, ni entre while(s.length()<5)et s+=" ". (Sauf si vous n'avez pas compté cela dans votre nombre d'octets). Et vous pouvez économiser quelques octets en changeant d="Dec",c="Chr"pour d=p("Dec"),c=p("Chr")et faire changer vos appels p(d)et p(c)à det c.
Zacharý
Le 434 supprimait tous les espaces inutiles. Votre suggestion le ramène à 425. Merci!
xirt
Pourrait vouloir ajouter une note sur le 434 étant sans espaces inutiles dans la réponse
Zacharý
Terminé. Remarque: le programme a considérablement changé depuis (réduit davantage), les commentaires ci-dessus peuvent donc ne plus être pertinents
xirt
2

Tcl , 233 octets

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

Essayez-le en ligne!

sergiol
la source
J'ai exécuté ceci et j'obtiens 32 par exemple (un '' au lieu de Space), et 33!(pas d'espace entre 33 et !).
NoOneIsHere
@SeeOneRhino: Vous ne faites clairement pas attention au code. J'ai modifié le code du lien après l'avoir collé ici, pour tenter de le jouer encore plus, mais je n'ai pas encore réussi. Je suis juste allé à la page maintenant et j'ai commenté ma tentative échouée et j'ai répété le code d'ici; Si vous y allez maintenant, vous verrez le code exactement égal et vous le verrez imprimer les choses correctement!
sergiol
Je suis désolé, je n'ai pas vu votre modification du lien. J'ai supposé que le code était le même que celui que vous aviez publié ici.
NoOneIsHere
Pas de problème, c'était de ma faute
sergiol
@SeeOneRhino: je l'ai atteint! Je me suis surpassé!
sergiol
2

R , 235 228 221 212 octets

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

Essayez-le en ligne!

J'ai vraiment essayé d'obtenir moins de 200 octets mais ceux paste- ci collapseme tuent. Renvoie une liste de lignes.

JayCe
la source
1

JavaScript (ES6), 258 octets

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)
Julian Lachniet
la source
1

PowerShell , 159 octets

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

Essayez-le en ligne!

Les deux premières lignes créent simplement des chaînes littérales et les laissent sur le pipeline. Le premier utilise l'opérateur virgule, pour créer un tableau, puis-join s ce tableau ensemble pour créer les en-têtes. La seconde est juste une multiplication de chaîne droite.

La troisième ligne boucle sur 32..63et chaque itération envoie trois valeurs $_, ($_+32)et ($_+64)dans une boucle intérieure. La boucle interne fait un PadRightsur la valeur (ajoute les espaces appropriés pour remplir les 5caractères). C'est alors une chaîne concaténée +avec le résultat d'un pseudo-ternaire imbriqué ( )[ ]. Le pseudo-ternaire sélectionne soit la charreprésentation de ce nombre, soit sinon Spaceou DELsi c'est la valeur appropriée. Encore une fois, nous PadRightles personnages appropriés.

Ces trois chaînes (par exemple 32 Space, 64 @, 96 `) sont encapsulées dans parens et -joined avec les marqueurs de colonne dans une seule chaîne. Chacune de ces 32 chaînes est ensuite laissée sur le pipeline. À la fin de l'exécution, un implicite Write-Outputinsère une nouvelle ligne entre les éléments du pipeline, nous l'obtenons donc gratuitement.

AdmBorkBork
la source
1

Perl, 165 155 octets

$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
nwk
la source
1

Python 2, 1564 218 octets

Mon premier golf, désolé pour des erreurs évidentes

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"

Essayez-le en ligne!

Au cas où vous vous poseriez la question, la première version était une chaîne encodée en base64.

sagiksp
la source
@FlipTack l'a changé en une solution réelle
sagiksp
Espace blanc non requis à ljust(6) for.
Yytsi
Un autre à x in [. Et IIRC les crochets à l'intérieur joinpeuvent être supprimés.
Yytsi
1

05AB1E , 82 76 octets

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

Essayez-le en ligne!

Toujours au golf, cela peut être beaucoup amélioré.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø pousse les nombres remplis avec un équivalent texte:

[['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… | ©ý} les joint ensemble dans la table:

['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×.Á.Á» s'occupe de la partie en-tête du tableau:

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  
Urne de poulpe magique
la source
1

PHP, 163 149 147 octets

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

panne

                        # 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'utilisation %-Nvaut l'octet que les chiffres et les caractères à droite enregistreraient.

Titus
la source
Ressemble mieux à mon avis avec le même nombre d'octets Essayez-le en ligne!
Jörg Hülsermann
0

T-SQL, 242 octets

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

Formaté:

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

J'ai essayé quelques variantes, y compris le remplacement de diverses chaînes communes par d'autres variables, mais c'était la version la plus courte que j'ai trouvée.

BradC
la source
0

Python 3 , 154 octets

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

Essayez-le en ligne!

ovs
la source
0

Attaché , 144 octets

(p:=PadRight)["",37,"Dec  Chr   | "]'(34*"-")'(Join&"| "=>Tr@ChopInto&3<|{p&11<|p&5@Repr@_+(<~32->$Space,127->$DEL~>@_or Char!_)}=>32:127)|Print

Essayez-le en ligne!

Conor O'Brien
la source