Écrivez un programme aussi court que possible (mesuré par le nombre d'octets), ne prend aucune entrée, ne contient aucun commentaire et génère une chaîne / séquence de caractères, de telle sorte que le programme + la sortie concaténés ont exactement 95 caractères et contiennent chaque caractère ASCII imprimable exactement une fois , c'est-à-dire que programme + sortie est une permutation des 95 caractères avec les codes ASCII 32-126:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
En cas d'égalité, le gagnant est l'entrée dont le programme + sortie concaténé (95 caractères) est le plus proche de la chaîne ci-dessus, tel que mesuré par la distance d'édition de Levenshtein (c'est -à- dire le nombre de suppressions, insertions ou substitutions nécessaires pour le mettre en ordre ASCII).
echo $0
est disqualifié.Réponses:
GolfScript, 14 caractères
Sortie :
la source
),
- sensationnel. J'aime ça.Perl, 89 caractères
C'est le meilleur que j'ai pu faire jusqu'à présent:
Pour ceux qui ne connaissent pas les minuties Perl, les deux arguments de la
print
déclaration pourraient être rendus comme~(-($=)) . (73 * 2)
ettr///
.Le programme produit 6 caractères:
Malheureusement , chaque construction simple d'itération que je peux penser en Perl (
for
,while
,until
,map
,grep
) actions au moins un caractère avecprint
. Si des retours à la ligne étaient autorisés à apparaître dans la sortie, je pourrais utiliser Perl 5.010 pour obtenir une solution à 87 caractères:la source
$=
est le nombre de lignes horizontales dans le périphérique de sortie actuel. Par défaut, 60.~-$=
est l'inversion au niveau du bit du complément à deux négatif de 60, qui se trouve être59
.73*2
est 146..
et,
faites ce que vous attendez d'eux.y[]{}
est une autre façon de diretr///
, qui est l'opérateur de translittération. Cela prend$_
et ne fait rien, car vous ne lui avez donné aucun caractère à remplacer. Il renvoie le nombre de caractères remplacés, qui est0
. Nous avons donc~-$= . 73*2 , y[]{}
=59 . 146 , 0
= '591460`.PHP 67 octets
Production:
Il semble qu'il devrait y avoir une solution de 65 octets, produisant 30 caractères au lieu de seulement 28, mais je n'ai pas réussi à l'aligner. Les 6 caractères inutilisés
OSXouz
ont été collés à la place sur l'un des littéraux de chaîne.Edit: Après réflexion, il n'est pas possible de générer plus de 28 caractères de cette manière.
UPPER ^ lower
donnera toujours un caractère compris entre 32 et 63, donc les 10 chiffres sont nécessaires pour@[\]_`{|}~
. Quatre des 22 restants sont utilisés dans le script lui-même, ne laissant que 18 qui peuvent être obtenus avec des lettres seules. Le bris d'égalité pourrait cependant être considérablement amélioré.la source
Rubis, 91 caractères
Sorties
6273
.%{...}
tour volé à Jan Dvorakla source
%{ !"#$&\',-/450:<=>ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcefghijklmnqvwxyz|~};puts([email protected]*98+1)
est ce que je pense que vous voulez (pour 91 caractères) avec le point-virgule déplacé pour être utilisé comme séparateur imprimable (au lieu d'une nouvelle ligne), et avec les lettres de 'ord' supprimées de l'intérieur des accolades.Perl, 61 caractères
Production:
$:
par défaut à" \n-"
.x8
le répète huit fois; le résultat de 24 caractères est ensuite xorisé au niveau du bit avec une barre de 23 caractères (le dernier-
est laissé tel quel ). La deuxième partie est une chaîne q de 12 caractères au niveau du bit et une barre de 10 caractères (les 2 derniers caractères sont supprimés).la source
Ruby, 95 caractères, 6 modifications
Oui. C'est ça. Juste un littéral de chaîne flottant qui n'est jamais imprimé. Ruby prend en charge les littéraux de chaîne (empruntés à Perl, je pense) sous la forme d'un délimiteur de type pour cent - le délimiteur est n'importe quel caractère non alphanumérique, et si le délimiteur d'ouverture est une parenthèse ouvrante (n'importe laquelle
[({<
), le délimiteur de fermeture est le délimiteur correspondant crochet de fermeture (les crochets imbriqués sont autorisés).Je me rends compte que c'est plus une soumission de base, mais à moins que quelqu'un ne parvienne à imprimer quelque chose ou à moins qu'il y ait un langage avec une chaîne de caractères de forme libre à deux caractères avec un délimiteur d'ouverture et de fermeture différent , c'est le meilleur qui soit.
la source
Tcl 96, modifier la distance 12
la source
join {!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghklmpqrstuvwxyz|~}
semble fonctionner avec 95 caractères? (Merci pour votre entrée. Désolé pour le caméléon - malheureusement j'ai édité à la hâte, et j'aurais dû faire les choses différemment.)