Recrea la tabla ASCII como una tabla ASCII

26

Con frecuencia, mientras practico golf de códigos, querré saber cuál es el valor ASCII de un determinado personaje. Uno de mis recursos favoritos para buscar rápidamente todos los caracteres ASCII imprimibles es ASCIItable.com . Esto tiene una imagen realmente agradable que no solo muestra los caracteres ASCII imprimibles y sus valores, sino también los caracteres no imprimibles y extendidos, y los valores en hexadecimal, octal y HTML:

ingrese la descripción de la imagen aquí

El desafío de hoy es recrear esa tabla ASCII como una tabla ASCII en lugar de una imagen. Para simplificar las cosas, no utilizaremos caracteres de control (caracteres inferiores a 32) y solo mostraremos el valor decimal y el carácter. En otras palabras, su desafío es escribir un programa completo o una función que imprima o devuelva el siguiente texto:

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

Se permiten espacios finales en cada línea y una nueva línea final. Dado que este es un , es posible que su envío no tome ninguna entrada o acceda a recursos externos (como un archivo o la web), y su objetivo es comprimir el código para generar este texto tanto como sea posible.

Se aplican las lagunas estándar y gana la respuesta más corta en bytes. ¡Feliz golf!

DJMcMayhem
fuente
3
Tengo esa imagen de tabla ASCII exacta pegada en mi pared ... De todos modos, ¿se puede devolver una lista de líneas?
FlipTack
2
@fliptack Por supuesto que puedes. ¿Por qué no permitiría algo perfectamente razonable como eso?
DJMcMayhem
10
No diría que esto es un engaño: el otro requiere valores hexadecimales, nombres de no imprimibles y es un formato de tabla diferente. Esto se adhiere al ASCII visible y permite el código de golfista al no solicitar los códigos de 3 letras de todos los no imprimibles.
FlipTack
@FlipTack Todavía tiene Space y DEL
simon
2
@gurka sí, pero el otro tiene todos los caracteres de control.
FlipTack

Respuestas:

11

Python 2, 185 183 175 159 bytes

¡Guardado 8 bytes gracias a FlipTack!

Todavía bastante nuevo para el 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]

Utiliza una comprensión de lista anidada para generar el cuerpo de la tabla.

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

Antiguo intento, 185 183 175 bytes

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]

Sin 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
fuente
Veo un espacio en `para l en (i, 32 + i, 64 + i)])`, podría eliminarse para guardar un byte.
maxb
6

Befunge, 176 172 bytes

<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

Pruébalo en línea!

James Holderness
fuente
6

Pyth, 89 85 79 77 bytes

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

Pruébalo en línea!

insert_name_here
fuente
5

JavaScript (ES6), 179 173 bytes

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
fuente
¡Buena respuesta! Puede guardar un byte más reemplazando `${x='Dec Chr '}| ${x}| ${x}al final de la línea 2 por(x='Dec Chr ')+(' |'+x)*2+`
Luke
@ L.Serné No conozco ninguna versión de ECMAScript que repita una cadena con el *operador. ¿O de alguna manera estoy malinterpretando tu sugerencia?
Arnauld
Uy, mi mal. Eso es lo que obtienes por intentar desarrollar una solución de Python y luego javascript.
Lucas
5

V , 98, 96 , 94 bytes

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

Pruébalo en línea!

Sólo apenas chirridos en menos de un centenar. Veré si puedo vencer a Pyth, pero no haré ninguna promesa.

Aquí hay 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

Y así es como funciona:

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

Aquí es donde se pone interesante. Primero, déjame explicarte un truco vim. Mientras está en modo de inserción, se insertan ciertos caracteres (todos los caracteres ASCII imprimibles, la mayoría de los caracteres no asignados arriba 0x7fy algunos otros), pero otros caracteres tienen un efecto secundario. Por ejemplo, 0x1b( <esc>) escapará al modo normal. 0x01(<C-a> ) volverá a insertar el último texto insertado, etc. A veces, queremos insertar estos caracteres literalmente. Entonces, para insertar un carácter de escape literal, debe escribir <C-v><esc>. Esto funciona para todos los personajes que tienen un efecto secundario. Así que esencialmente<C-v> es el equivalente de una barra invertida en idiomas con literales de cadena que le permiten escapar de ciertos caracteres en una cadena.

El otro truco útil con el <C-v>modo de inserción es que se puede usar para insertar caracteres por punto de código , ya sea en decimal, hexadecimal, octal o hexadecimal unicode. Como ya tenemos los números que corresponden a ciertos valores ASCII, solo necesitamos poner un <C-v>antes de esos caracteres y ejecutar el texto correspondiente como pulsaciones de teclas vim. Esto se puede lograr con un comando regex y un comando "Do 'x' en cada línea". Así que nosotros:

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

En este punto, el búfer se ve así

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       

Ahora solo necesitamos un poco de limpieza general, que representa la mayoría de los bytes en esta respuesta

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
fuente
5

F #, 222 bytes

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

Pruébalo en línea!

Asik
fuente
¿Puedo pedir una versión no protegida de esto, por favor? ¡Soy muy nuevo en aprender F #, y me encantaría entender correctamente cómo hiciste esto!
Ciaran_McCarthy
1
La primera línea alias dos funciones para nombres de un solo carácter. Ahora si lo haces ["ab"; "cd"] |> c |> pconcatena con "|" caracteres y los imprime, como "ab | cd", que es la idea básica para imprimir la tabla. El resto es bastante sencillo, simplemente evitando espacios en blanco siempre que sea posible.
Asik
4

cc , 167 bytes

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

Pruébalo en línea!

Cómo funciona:

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

Perl, 120 bytes

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

Corre con -Ebandera:

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

-2 bytes gracias a @GB .

Dada
fuente
Si entiendo un poco de Perl, tal vez puedas cortar 2 espacios usando "% -5s" en lugar de "% -3s" (por cierto, eso es lo que hago en ruby)
GB
3

C, 179 bytes

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

Pruébalo en línea!

Semi-sin 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
fuente
3

Ruby, 124 bytes

 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
fuente
3

V , 151 150 148 136 135 130 129 125 bytes

12 bytes guardados gracias a @ nmjcman101 por usar <C-v>g<C-a>los números en lugar deline('.')

2 bytes guardados gracias a @DJMcMayhem por eliminar líneas con espacios iniciales utilizando ÇÓ/dy utilizando para eliminar espacios adicionales y reorganizar cosas

Esta respuesta está en competencia con la respuesta V de @ nmjcman101 (que utiliza:set ve=all ). Pero ahora, encontré una forma de eliminar esos A ^[correos electrónicos y guardé algunos bytes y estamos en un bytecount uniforme

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

Pruébalo en línea!

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 

Explicación (incompleta y desactualizada)

La estrategia aquí es que estoy usando los números de línea para generar los puntos de código ASCII.

Nota: ^[es 0x1b,^V esC-v

Primero generamos todos los personajes.

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

El búfer actual se parece a

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

Ahora insertamos una nueva línea entre estos caracteres.

     Ó./&ò         " insert a newline before every character (:s/./&\r/g)
Kritixi Lithos
fuente
Aquí hay una caída en el reemplazo de la 32 SPACE ... 127 DELparte de su código: ¡ Pruébelo en línea! Utiliza esa cosa ordenada donde puedes resaltar un montón de números, y luego la g^Aconvierte en una secuencia creciente (¿nueva en Vim 8?)
nmjcman101
@ nmjmcman101 Sí, se agregó en 7.4.algo, pero se agregó oficialmente en 8. Incluso mejor sería usar el comando de norma ¡ Pruébelo en línea!
DJMcMayhem
De cualquier manera, una vez que lo haga, puede hacer un :set ve=ally luego el cursor se moverá a lugares donde no hay texto, lo que le permite insertar las tuberías más fácilmente y copiar / pegar en los lugares que necesita sin rociar en A <esc>todas partes
nmjcman101
@ nmjcman101 g^AGracias, me ahorró 12 bytes :)
Kritixi Lithos
@DJMcMayhem Por alguna razón, usar la norma y luego incrementar los números no funciona
Kritixi Lithos
3

V , 130 120 99 bytes

Club Sub 100. Ya no estoy convencido de que esa :se ve=allsea ​​la mejor manera de hacerlo. Es un extra ... ¡11 bytes solo por escribir los |'s! Pero eso es lo que tengo.

Estoy publicando esto casi en competencia con la respuesta de @KritixiLuthos usando :se ve=allpara evitar algunas A <esc>. No estoy convencido de que ninguno de los métodos sea mejor todavía, así que espero que esto pueda inspirar un poco de golf en ambas partes y ver qué método se lleva la palma.

También estoy medio esperando que @DJMcMayhem nos patee los dos pantalones

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

Pruébalo en línea!

Hexdump para los curiosos (si hay interés, solo cambiaré esto a un bloque de caracteres ocultos de estilo 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
fuente
1
El comando global podría acortarse con un pero. Por un lado, el ddestá implícito si solo lo haces d. También puede hacer lo <M-s>que siempre es equivalente a \sen regex. Por lo que podría reducir su longitud a: ç^ó*/d. Pero si cambia el comando global para el inverso :g!, podría buscar cada línea que no coincida con un carácter que no sea un espacio en blanco. ÇÓ/dque es equivalente a:g!/\S/normal dd
DJMcMayhem
3

AWK , 200 bytes

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

Formateado:

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

Pruébalo en línea!

Steve
fuente
2

C 188 Bytes

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

Normalmente se ve así:

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
fuente
2

C (249 bytes)

Nuevas líneas agregadas para mayor claridad.

#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");}}
musaritmia
fuente
Definitivamente puede guardar algunos bytes haciendo Pbe printf(, como se muestra aquí: repl.it/JBRD
Zacharý
Y quitando el espacio en su cuarta línea.
Zacharý
2

Java, 434 422 321 bytes

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 probablemente no sea el mejor lenguaje para esto, ya que existe la sobrecarga de clases y método principal ...

Puede eliminar el método principal utilizando una declaración estática, reduciendo aún más la cuenta regresiva de bytes:

class A{
    static{...}

pero esto da como resultado un error (después de ejecutarse correctamente):

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

El recuento de bytes incluye int nuevas líneas o sangría.

xirt
fuente
No creo que necesites un espacio después void main(){, y tampoco entre while(s.length()<5)y s+=" ". (A menos que no haya contado eso en su cuenta de bytes). Y usted puede ahorrar unos pocos bytes cambiando d="Dec",c="Chr"a d=p("Dec"),c=p("Chr")y hacer el cambio de sus llamadas p(d)y p(c)de dy c.
Zacharý
El 434 estaba eliminando todos los espacios en blanco innecesarios. Su sugerencia lo reduce a 425. ¡Gracias!
xirt
Quizás desee agregar una nota sobre el 434 sin espacios en blanco innecesarios en la respuesta
Zacharý
Hecho. Nota: el programa ha cambiado significativamente desde (reducido aún más) lo que los comentarios anteriores ya no pueden ser relevantes
xirt
2

Tcl , 233 bytes

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

Pruébalo en línea!

sergiol
fuente
Ejecuté esto y obtengo, 32 por ejemplo (un '' en lugar de Space), y 33!(sin espacio intermedio 33 y !).
NoOneIsHere
@SeeOneRhino: Claramente no estás prestando atención al código. Modifiqué el código del enlace después de pegar aquí, en un intento de jugarlo aún más, pero aún no lo logré. Acabo de ir a la página ahora y comenté mi intento fallido y repasé el código desde aquí; ¡Si vas allí ahora, verás el código exactamente igual y verás que imprime bien!
sergiol
Lo siento, no vi tu edición en el enlace. Supuse que el código era el mismo que había publicado aquí.
NoOneIsHere
No hay problema, fue mi culpa
sergiol
@SeeOneRhino: ¡Lo logré! Me superé a mí mismo!
sergiol
2

R , 235 228 221 212 bytes

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

Pruébalo en línea!

Intenté realmente conseguir menos de 200 bytes, pero estos pastey collapseme están matando. Devuelve una lista de líneas.

JayCe
fuente
1

JavaScript (ES6), 258 bytes

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
fuente
1

PowerShell , 159 bytes

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

Pruébalo en línea!

Las primeras dos líneas simplemente crean cadenas literales y las dejan en la tubería. El primero usa el operador de coma, para crear una matriz, y luego-join une esa matriz para crear los encabezados. El segundo es solo una multiplicación de cuerda recta.

Los bucles de tercera línea sobre 32..63y cada iteración envía tres valores $_, ($_+32)y ($_+64)en un bucle interior. El bucle interno hace un PadRightsobre el valor (agrega los espacios apropiados para rellenar los 5caracteres). Esa es una cadena concatenada +con el resultado de un pseudoternario anidado ( )[ ]. El pseudoternario selecciona la charrepresentación de ese número, o bien SpaceoDEL si es el valor apropiado. De nuevo, somos PadRightlos personajes apropiados.

Esas tres cadenas (por ejemplo, 32 Space, 64 @, 96 `) se encapsulan en parens y -joined con los marcadores de columna en una sola cadena. Cada una de esas 32 cadenas se deja en la tubería. Al final de la ejecución, un implícito Write-Outputinserta una nueva línea entre los elementos en la tubería, por lo que lo obtenemos de forma gratuita.

AdmBorkBork
fuente
1

Perl 165 155 bytes

$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
fuente
1

Python 2, 1564 218 bytes

Mi primer golf, perdón por los errores obvios.

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"

Pruébalo en línea!

En caso de que se pregunte, la primera versión fue una cadena codificada en base64.

sagiksp
fuente
@FlipTack lo cambió a una solución real
sagiksp
Espacio en blanco no requerido en ljust(6) for.
Yytsi
Otro en x in [. Y IIRC los corchetes dentro joinpueden borrarse.
Yytsi
1

05AB1E , 82 76 bytes

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

Pruébalo en línea!

Todavía jugando al golf, esto se puede mejorar mucho.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø empuja números rellenados con texto 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… | ©ý} los une a la mesa:

['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×.Á.Á» se encarga de la parte del encabezado de la tabla:

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  
Urna de pulpo mágico
fuente
1

PHP, 163 149 147 bytes

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

Descompostura

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

El uso %-Nvale el byte que los números y caracteres de la derecha guardarían.

Titus
fuente
En mi opinión, se ve mejor con el mismo número de bytes. ¡ Pruébelo en línea!
Jörg Hülsermann
0

T-SQL, 242 bytes

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

Formateado:

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

Intenté algunas variaciones, incluida la sustitución de varias cadenas comunes con otras variables, pero esta fue la versión más corta que encontré.

BradC
fuente
0

Python 3 , 154 bytes

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

Pruébalo en línea!

ovs
fuente
0

Adjunto , 144 bytes

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

Pruébalo en línea!

Conor O'Brien
fuente