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:
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 défi de complexité kolmogorov , 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!
la source
Réponses:
Python 2,
185183175159 octets8 octets enregistrés grâce à FlipTack!
Encore assez nouveau pour jouer au golf en Python.
Utilise une compréhension de liste imbriquée pour générer le corps du tableau.
Non golfé:
Ancienne tentative,
185183175 175 octetsNon golfé:
la source
Befunge,
176172 octetsEssayez-le en ligne!
la source
Pyth,
89857977 octetsEssayez-le en ligne!
la source
JavaScript (ES6),
179173 octetsla source
`${x='Dec Chr '}| ${x}| ${x}
à la fin de la ligne 2 par(x='Dec Chr ')+(' |'+x)*2+`
*
opérateur. Ou suis-je en quelque sorte mal compris votre suggestion?V ,
98, 96, 94 octetsEssayez-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:
Et voici comment cela fonctionne:
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:À ce stade, le tampon ressemble à ceci
Maintenant, nous avons juste besoin d'un nettoyage général, qui représente la plupart des octets de cette réponse
la source
F #, 222 octets
Essayez-le en ligne!
la source
["ab"; "cd"] |> c |> p
il 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.DC , 167 octets
Essayez-le en ligne!
Comment ça marche:
la source
Perl, 120 octets
Courir avec le
-E
drapeau:-2 octets grâce à @GB .
la source
C, 179 octets
Essayez-le en ligne!
Semi-non golfé:
la source
Rubis, 124 octets
la source
V ,
151150148136135130129 129125 octets12 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 utilisantdê
pour supprimer les espaces supplémentaires et réorganiser les élémentsCette 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 cesA ^[
s et enregistré quelques octets et nous sommes à un nombre d'octets égalEssayez-le en ligne!
Hexdump:
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:
^[
est0x1b
,^V
estC-v
Nous générons d'abord tous les personnages.
Le tampon actuel ressemble à
Maintenant, nous insérons une nouvelle ligne entre ces caractères
la source
32 SPACE ... 127 DEL
partie de votre code: Essayez-le en ligne! Il utilise cette chose intéressante où vous pouvez mettre en évidence un tas de nombres, puis eng^A
fait une séquence croissante (nouvelle dans Vim 8?):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 saupoudrerA <esc>
partoutg^A
merci, cela m'a fait économiser 12 octets :)V ,
13012099 octetsClub 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=all
pour é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
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)
la source
dd
est implicite si vous le faitesd
. Vous pouvez également faire<M-s>
ce qui est toujours équivalent à\s
dans 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.ÇÓ/d
ce qui équivaut à:g!/\S/normal dd
AWK , 200 octets
Formaté:
Essayez-le en ligne!
la source
C 188 octets
Ressemble normalement à ceci:
la source
C (249 octets)
Ajout de nouvelles lignes pour plus de clarté.
la source
P
beprintf(
, comme indiqué ici: repl.it/JBRDJava,
434422321 octetsJava 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:
mais cela se traduit par une erreur (après une exécution réussie):
Le nombre d'octets n'inclut pas les sauts de ligne ou l'indentation.
la source
void main(){
, ni entrewhile(s.length()<5)
ets+=" "
. (Sauf si vous n'avez pas compté cela dans votre nombre d'octets). Et vous pouvez économiser quelques octets en changeantd="Dec",c="Chr"
pourd=p("Dec"),c=p("Chr")
et faire changer vos appelsp(d)
etp(c)
àd
etc
.Tcl , 233 octets
Essayez-le en ligne!
la source
32
par exemple (un '' au lieu deSpace
), et33!
(pas d'espace entre33
et!
).R ,
235 228 221212 octetsEssayez-le en ligne!
J'ai vraiment essayé d'obtenir moins de 200 octets mais ceux
paste
- cicollapse
me tuent. Renvoie une liste de lignes.la source
JavaScript (ES6), 258 octets
la source
PowerShell , 159 octets
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..63
et chaque itération envoie trois valeurs$_
,($_+32)
et($_+64)
dans une boucle intérieure. La boucle interne fait unPadRight
sur la valeur (ajoute les espaces appropriés pour remplir les5
caractè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 lachar
représentation de ce nombre, soit sinonSpace
ouDEL
si c'est la valeur appropriée. Encore une fois, nousPadRight
les personnages appropriés.Ces trois chaînes (par exemple
32 Space
,64 @
,96 `
) sont encapsulées dans parens et-join
ed 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 impliciteWrite-Output
insère une nouvelle ligne entre les éléments du pipeline, nous l'obtenons donc gratuitement.la source
Perl,
165155 octetsla source
Python 2,
1564218 octetsMon premier golf, désolé pour des erreurs évidentes
Essayez-le en ligne!
Au cas où vous vous poseriez la question, la première version était une chaîne encodée en base64.
la source
ljust(6) for
.x in [
. Et IIRC les crochets à l'intérieurjoin
peuvent être supprimés.05AB1E ,
8276 octetsEssayez-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:vyð2×ý})3äøvy… | ©ý}
les joint ensemble dans la table:®”†… Chr ÿ”3ר¨'-34×.Á.Á»
s'occupe de la partie en-tête du tableau:la source
PHP,
163 149147 octetspanne
L'utilisation
%-N
vaut l'octet que les chiffres et les caractères à droite enregistreraient.la source
Stax , 53 octets
Exécuter et déboguer
la source
T-SQL, 242 octets
Formaté:
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.
la source
Python 3 , 154 octets
Essayez-le en ligne!
la source
Attaché , 144 octets
Essayez-le en ligne!
la source