Les caractères ASCII imprimables (codes hexadécimaux 20 à 7E) dans l’ordre sont:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Notez que l'espace est là.)
Cette chaîne contient clairement tous les caractères imprimables ASCII au moins une fois par ordre croissant lors de la lecture de gauche à droite, mais pas par ordre décroissant.
La ficelle
REVERSED:~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! NORMAL: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
contient tous les caractères ASCII imprimables au moins une fois, par ordre croissant et décroissant. En d'autres termes, lorsque les caractères sont évalués avec leur code numérique, les sous- séquences les plus longues augmentant et les plus décroissantes ont une longueur de 95 (le nombre de caractères ASCII imprimables).
Défi
Choisissez un sous-ensemble contigu de N caractères ASCII imprimables, tel que LMNOP
(N = 5). Écrivez un programme utilisant uniquement les N caractères dont la sortie contient les 95 caractères ASCII dans l'ordre croissant et décroissant, comme dans l'exemple ci-dessus.
Le gagnant est la soumission avec le plus petit N. En cas d'égalité, le code le plus court en octets gagne.
Remarques
- Un sous-ensemble contigu signifie un ensemble des fichiers ASCII imprimables qui apparaissent tous dans une ligne non interrompue, tels que
LMNOP
ou89:;<=>
. - Votre sous-ensemble contigu peut "faire une boucle" depuis
~
vers l'espace, mais cela entraîne une pénalité de +3 sur N. Donc,{|}~
N = 4, mais{|}~ !
N = 6 + 3 = 9. - Votre programme ne peut contenir que les N caractères ASCII imprimables du sous-ensemble contigu que vous avez sélectionné. Ils ne doivent pas tous apparaître et peuvent apparaître plusieurs fois dans n'importe quel ordre. (Tous les fichiers ASCII non imprimables et tous les fichiers non ASCII ne sont pas autorisés. Cela signifie que les tabulations et les nouvelles lignes ne sont pas autorisées.)
- Votre sortie ne peut contenir que des caractères ASCII imprimables et doit comporter moins de 10000 caractères.
- Les sous-séquences d'augmentation et de diminution les plus longues de votre sortie doivent avoir une longueur de 95 (comme expliqué ci-dessus).
- Sortie sur stdout. Il n'y a pas d'entrée.
- N est un entier positif inférieur à 96.
la source
Réponses:
Unaire, N = 1
14680262330376163203871465704220787333741951071 octets
Utilise uniquement l'octet '0' (ASCII 49).
Golfé environ 4.13253e + 60 octets de la solution de @ Comintern. Crédit encore à lui :)
Dans le Brainfuck original:
la source
Unaire , N = 1
4132527913354820031118363262102424570092493175835499123283719 (4.1325279e + 60) octets
Le code source en unaire est évidemment trop volumineux pour être posté ici. Il peut être facilement reproduit en tapant (ou en générant) un fichier contenant des "0" de la même longueur que le nombre d'octets ci-dessus.
Voici la représentation binaire:
Et le code k équivalent de Brainf ** k (sauts de ligne pour plus de clarté):
Sortie:
EDIT: Golfé 9.097887e + 87 caractères inutiles.
la source
Brainfuck, N = 2
24 383 octets. Utilise seulement - et. (ASCII 45 et 46). Essayez-le ici: http://esoteric.sange.fi/brainfuck/impl/interp/i.html . Peut probablement être analysé comme du code Morse avec les bons espaces.
Nécessite un interprète adhérant à la définition traditionnelle du Brainfuck, qui utilise une matrice de (au moins) 30.000 octets de cellules, toutes initialisées à zéro.
la source
-
, puis la partie décroissante.-.-.etc
puis la partie ascendante (groupes de 255-
suivis de a.
) Pour autant que je sache, tout est là. Voir aussi éditer ma réponse pour des explications.-
dont un.
à la fin :). Ma faute.CJam - N = 3; 7659 octets
Essayez-le sur http://cjam.aditsu.net/
la source
Brainf ** k, N = 4
Mon premier programme de brainfuck. Utilise 3 caractères du bloc
+,-.
(Ascii 43 à 46.)410 octets (un
.
peut être supprimé du programme si le double~~
peut être réduit à un simple~
.)Voici la liste des commandes dans cette zone de la table ASCII (je n'ai pas besoin de la commande input):
Heureusement, les commandes restantes
<>[]
(déplacement du pointeur de données et exécution de sauts conditionnels) ne sont pas nécessaires!Divisez en 3 lignes pour plus de clarté: 1: incrémentez jusqu'à ce que les données atteignent 32. 2: sortie et incrémentez jusqu'à ce que les données atteignent 126. 3: sortez et décrémentez jusqu'à ce que les données atteignent 32.
Sortie
Modifier N = 2
Selon la réponse de @ nneonneo, il est possible de les remplacer
+
par 255-
signes pour N = 2. certains réarrangements du code et de la sortie (affichage vers le bas puis vers le haut) permettent de réduire la première ligne à 256-126 = 130-
signes. C’est ce qui m’est arrivé après que je me suis couché et que nneoneo m’y a battu. https://codegolf.stackexchange.com/a/35801/15599la source
~
au lieu de~~
puisque les sous-séquences croissantes et décroissantes seraient toujours là.C; N = 43 = 40 + 3
Ici, j'évite les caractères courants tels que
+
-
*
/
les chiffres0-9
, les virgules,
et les points-virgules;
.J'ai donc été obligé d'exprimer divers nombres en n'utilisant que les opérations
&
%
~
.Il est peut-être possible de jouer davantage au golf (la recherche des plus petites représentations pour les numéros 63 et 95 est un exercice pour le lecteur).
Le sous-ensemble ascii est 32 ... 41 et 97 ... 126.
Je ne suis pas sûr si les caractères de nouvelle ligne sont autorisés dans le code; sinon, supprimez-les simplement.
la source
Tourbillon , N = 2, 6486 octets
En utilisant seulement 2 caractères
01
,.Sortie:
Je pense que je peux jouer au golf avec plus de boucles, mais coder avec des 0 et des 1 était horrible, donc je ne le ferai pas.
Commenté
Notez qu'il y a
O
etl
comme0
et1
.la source
Python 2,7 N = 45 = 42 + 3
Cela utilise
string.printable
, trie et crache toutstdout
. Je sauve quelques caractères en insérant.
instdout.write
en utilisanteval
et en formatant les chaînes en utilisant lesord
valeurs des caractères que je pourrais utiliser.En finir avec les anciens - N = 49 = 46 + 3
Malheureusement, bien que python inclue lastring.printable
liste, celle-ci n’est pas dans l’ordre ascii et il n’existe aucun moyen de l’utiliser sans un*
ou une.
, de sorte qu’il faut moins de caractères pour le faire manuellement.Utilisation de la plage de caractères:
La version évidente: N = 63 = 60 + 3
C'est la version évidente utilisant la plage de caractères:
la source
len('x')
me sauve encore 2 caractères.import
solution ne fonctionnera que si vous avez;
, ce qui ajoute une quantité substantielle de caractères.C; N = 61 = 58 + 3
Pour compenser l'utilisation d'un si grand sous-ensemble, j'ai joué au golf avec mon code.
Le sous-ensemble ASCII est 32 ... 59 et 97 ... 126.
C'était un défi amusant d'éviter le
=
personnage!la source
;
. Vous pourrez peut-être utiliser cela pour développer votre réponse, sans que cela devienne une copie de l'autre.Python 2,7 N = 28 + 12 + 3 = 43
En utilisant des caractères
cdefghijklmnopqrstuvwxyz{|}~
, puis en enveloppant pour!"#$%&'()*+
Afin d'éviter d'utiliser,
,.-
j'ai dû utiliser quelques astuces. J'ai utiliséexec
pour que je puisse transformer le code en chaînes qui me permettaient d'utiliserchr(ord('+') + len('xxx'))
pour.
etchr(ord('+') + len('x'))
pour,
. N'importe quel endroit où j'avais besoin d'un -1, j'ai utilisé ~ 0 sous la forme de~len('')
. Pour évitera
, j'ai utiliséchr(ord('c') + ~len('x'))
(99 - 2).La chaîne qui est composée a N = 48, en utilisant des caractères
abcdefghijklmnopqrstuvwxyz{|}~
puis en se retournant autour de!"#$%&'()*+,-.
Notez que les nouvelles lignes et les commentaires servent uniquement à la lisibilité.
la source
Rubis - N = 48
Laisse Ruby être Ruby et embrasse la pénalité de bouclage.
N = 48 <- 15 ('' - '.') + 30 ('a' - '~') + 3
ou
Ancien:
N = 72 {score linéaire} <- 72 ('.'-' u ') + saut de ligne non valide
Il y en a ici pour éviter le "v" dans "l'inverse". Je l'ai laissé parce que j'aime le paquetage ("C *").
la source
x86_64 Code machine, format Mach-O
N = 2, 32768 caractères (trop grand pour tenir compte de la limite de msg)
Edit: Pastebin est en panne, vous pouvez donc trouver le texte intégral à: http://www.ionoclast.com/random/golf.bin.txt
la source
#include <unistd.h> int main() { char const s[] = "~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; write( 1, s, sizeof s ); }
Assembly devrait faire beaucoup mieux.Rubis, N = 27
Utilisations à
$
travers>
.la source
Scala, N = 69
Utilise les caractères
01246789\bdefu
(échappements Unicode) comme une manière élégante d’écrire(' 'to'~')++('~'to' ')map print
.la source