Tout en essayant de jouer plusieurs de mes réponses, j'ai dû écrire de grands nombres entiers en aussi peu de caractères que possible.
Maintenant, je connais la meilleure façon de le faire: je vais vous faire écrire ce programme.
Le défi
- Écrivez un programme qui, lorsqu'il reçoit un entier positif, génère un programme qui l'imprime sur stdout ou équivalent.
- Les programmes de sortie ne doivent pas nécessairement être dans la même langue que le créateur.
- La sortie doit être d'au plus 128 octets.
- Vous pouvez accepter l'entrée de stdin ou équivalent (pas d'entrée de fonction)
- Vous pouvez sortir le programme résultant sur stdout ou équivalent.
- La sortie numérique doit être décimale (base 10)
Notation
Votre score est égal au plus petit entier positif que votre programme ne peut pas coder.
L'entrée avec le score le plus élevé l'emporte.
Réponses:
Python 3 → CJam, (163 122 - 1) · 255/162 + 1 ≈ 1.213 · 10 270
Il s'avère que chaque entier de 1023 à (163 122 - 1) · 255/162 peut être représenté au moins d'une manière par une conversion de base b ≤ 163 à partir d'une chaîne d'au plus 122 caractères avec les codes 93 à b + 92, plutôt que l'habituel de 0 à b - 1. Cela évite les caractères gênants 34 (guillemet double) et 92 (barre oblique inverse) sans aucun code de sortie supplémentaire.
la source
Pyth, 252 111 ≈ 3,593 × 10 266
J'ai dû utiliser un peu de syntaxe Python, car Pyth ne
print
peut pas imprimeriso-8859-1
.Le nombre est codé en base 252 et représente chaque chiffre de cette base sous la forme d'un caractère iso-8859-1. Les caractères
\
et"
auraient besoin de s'échapper et ne sont donc pas utilisés. Le caractère`
n'est pas utilisé parce que jouer au golf ... Et en plus, l'octet nul n'est pas non plus utilisé, le compilateur Pyth l'interdit.La sortie est un programme avec une surcharge de 17 octets:
Voici un exemple d'utilisation avec le plus grand nombre possible:
Explication
du programme de sortie.
la source
12
, car Pyth lit malheureusement CR comme LF .CJam, 254 109 ≈ 1,34 x 10 262
J'encode le nombre dans la base 254 et représente chaque chiffre de cette base sous la forme d'un caractère ISO 8859-1, en sautant
"
et\
. La sortie a une surcharge de 19 octets,""{_'[>-_'!>-}%254b
donc je peux représenter tout ce qui est inférieur à 254 128-19 , ou explicitementPar exemple,
6153501
serait codé commeVoici un programme de test qui imprime l'entier codé, puis imprime sa longueur, puis l'exécute immédiatement pour montrer sa validité (cela évite d'avoir à copier les caractères non imprimables dans un nouveau programme, qui ne fonctionne pas toujours avec l'interprète en ligne).
la source
Perl, 10 216
Encodage également en base 100, légèrement plus élégant. Sortie pour
12345678
serait:Les délimètres
{
et}
correspondent aux valeurs hexadécimalesb7
etd7
respectivement, qui ne peuvent pas apparaître dans l'entrée, et donc ne pas besoin d'être échappé.Il y a 20 octets de surcharge, laissant 108 pour le codage, atteignant une valeur maximale de 10 216 -1.
Perl, 10 206
Encodage simple en base 100. La sortie pour
12345678
ressemblerait à ceci:Il y a 25 octets de surcharge, laissant 103 pour le codage, atteignant une valeur maximale de 10 206 -1.
la source
Lisp commun, 36114 - 1 ~ 2,62 × 10117
Le plus grand nombre est:
262110903510567204510935835404817018532936318707188694632900321233523044002781809113959992952482356206474995078940249429827687987350383362234813840904013801840002194446327847
Utilisez simplement la base 36. Pour la plus grande entrée, la sortie longue de 128 octets est:
la source
CJam, 233 114 ≈ 7,561⋅10 269
Le programme de sortie
"…"{iKms*}%233b
décode les caractères 8 bits d'une chaîne en base 233 chiffres avec n ↦ ⌊ n ⋅ sin 20⌋ = ⌊ n ⋅ 0,913⌋. Cette transformation se trouve être surjective sans nécessiter les points de code critiques 34 (guillemet double) et 92 (barre oblique inverse) en entrée.la source