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:
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 desafío de complejidad kolmogorov , 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!
fuente
Respuestas:
Python 2,
185183175159 bytes¡Guardado 8 bytes gracias a FlipTack!
Todavía bastante nuevo para el golf en Python.
Utiliza una comprensión de lista anidada para generar el cuerpo de la tabla.
Sin golf:
Antiguo intento,
185183175 bytesSin golf:
fuente
Befunge,
176172 bytesPruébalo en línea!
fuente
Pyth,
89857977 bytesPruébalo en línea!
fuente
JavaScript (ES6),
179173 bytesfuente
`${x='Dec Chr '}| ${x}| ${x}
al final de la línea 2 por(x='Dec Chr ')+(' |'+x)*2+`
*
operador. ¿O de alguna manera estoy malinterpretando tu sugerencia?V ,
98, 96, 94 bytesPrué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:
Y así es como funciona:
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
0x7f
y 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:En este punto, el búfer se ve así
Ahora solo necesitamos un poco de limpieza general, que representa la mayoría de los bytes en esta respuesta
fuente
F #, 222 bytes
Pruébalo en línea!
fuente
["ab"; "cd"] |> c |> p
concatena 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.cc , 167 bytes
Pruébalo en línea!
Cómo funciona:
fuente
Perl, 120 bytes
Corre con
-E
bandera:-2 bytes gracias a @GB .
fuente
C, 179 bytes
Pruébalo en línea!
Semi-sin golf:
fuente
Ruby, 124 bytes
fuente
V ,
151150148136135130129125 bytes12 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
ÇÓ/d
y utilizandodê
para eliminar espacios adicionales y reorganizar cosasEsta respuesta está en competencia con la respuesta V de @ nmjcman101 (que utiliza
:set ve=all
).Pero ahora, encontré una forma de eliminar esosA ^[
correos electrónicos y guardé algunos bytes y estamos en un bytecount uniformePruébalo en línea!
Hexdump:
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:
^[
es0x1b
,^V
esC-v
Primero generamos todos los personajes.
El búfer actual se parece a
Ahora insertamos una nueva línea entre estos caracteres.
fuente
32 SPACE ... 127 DEL
parte de su código: ¡ Pruébelo en línea! Utiliza esa cosa ordenada donde puedes resaltar un montón de números, y luego lag^A
convierte en una secuencia creciente (¿nueva en Vim 8?):set ve=all
y 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 enA <esc>
todas partesg^A
Gracias, me ahorró 12 bytes :)V ,
13012099 bytesClub Sub 100. Ya no estoy convencido de que esa
:se ve=all
sea 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=all
para evitar algunasA <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
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)
fuente
dd
está implícito si solo lo hacesd
. También puede hacer lo<M-s>
que siempre es equivalente a\s
en 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.ÇÓ/d
que es equivalente a:g!/\S/normal dd
AWK , 200 bytes
Formateado:
Pruébalo en línea!
fuente
C 188 Bytes
Normalmente se ve así:
fuente
C (249 bytes)
Nuevas líneas agregadas para mayor claridad.
fuente
P
beprintf(
, como se muestra aquí: repl.it/JBRDJava,
434422321 bytesJava 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:
pero esto da como resultado un error (después de ejecutarse correctamente):
El recuento de bytes incluye int nuevas líneas o sangría.
fuente
void main(){
, y tampoco entrewhile(s.length()<5)
ys+=" "
. (A menos que no haya contado eso en su cuenta de bytes). Y usted puede ahorrar unos pocos bytes cambiandod="Dec",c="Chr"
ad=p("Dec"),c=p("Chr")
y hacer el cambio de sus llamadasp(d)
yp(c)
ded
yc
.Tcl , 233 bytes
Pruébalo en línea!
fuente
32
por ejemplo (un '' en lugar deSpace
), y33!
(sin espacio intermedio33
y!
).R ,
235 228 221212 bytesPruébalo en línea!
Intenté realmente conseguir menos de 200 bytes, pero estos
paste
ycollapse
me están matando. Devuelve una lista de líneas.fuente
JavaScript (ES6), 258 bytes
fuente
PowerShell , 159 bytes
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..63
y cada iteración envía tres valores$_
,($_+32)
y($_+64)
en un bucle interior. El bucle interno hace unPadRight
sobre el valor (agrega los espacios apropiados para rellenar los5
caracteres). Esa es una cadena concatenada+
con el resultado de un pseudoternario anidado( )[ ]
. El pseudoternario selecciona lachar
representación de ese número, o bienSpace
oDEL
si es el valor apropiado. De nuevo, somosPadRight
los personajes apropiados.Esas tres cadenas (por ejemplo,
32 Space
,64 @
,96 `
) se encapsulan en parens y-join
ed 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ícitoWrite-Output
inserta una nueva línea entre los elementos en la tubería, por lo que lo obtenemos de forma gratuita.fuente
Perl
165155 bytesfuente
Python 2,
1564218 bytesMi primer golf, perdón por los errores obvios.
Pruébalo en línea!
En caso de que se pregunte, la primera versión fue una cadena codificada en base64.
fuente
ljust(6) for
.x in [
. Y IIRC los corchetes dentrojoin
pueden borrarse.05AB1E ,
8276 bytesPrué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:vyð2×ý})3äøvy… | ©ý}
los une a la mesa:®”†… Chr ÿ”3ר¨'-34×.Á.Á»
se encarga de la parte del encabezado de la tabla:fuente
PHP,
163 149147 bytesDescompostura
El uso
%-N
vale el byte que los números y caracteres de la derecha guardarían.fuente
Stax , 53 bytes
Ejecutar y depurarlo
fuente
T-SQL, 242 bytes
Formateado:
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é.
fuente
Python 3 , 154 bytes
Pruébalo en línea!
fuente
Adjunto , 144 bytes
Pruébalo en línea!
fuente