Je suis intéressé à voir des programmes qui ne demandent aucune entrée, impriment une copie googol d'une chaîne non vide, ni moins, ni plus, et puis s'arrêtent. Un googol est défini comme 10 ^ 100, soit 1 suivi de cent 0 en décimal.
Exemple de sortie:
111111111111111111111111111111111111111111111111111111111111111111111111...
ou
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
...
La chaîne peut également être entièrement composée d'espaces ou de symboles spéciaux. La seule exception aux copies identiques d'une chaîne fixe est si votre langue décore la sortie d'une manière qui ne peut pas être empêchée, mais peut être annulée de manière triviale dans un script wrapper, comme par exemple l'ajout d'un numéro de ligne à chaque ligne. Dans ce cas, le script d'emballage ne doit pas être fourni.
Vous pouvez supposer que votre ordinateur ne manquera jamais de temps, mais à part cela, votre programme doit avoir une demande raisonnable en ressources. En outre, vous devez respecter les restrictions éventuelles imposées par le langage de programmation de votre choix. Par exemple, vous ne pouvez pas dépasser la valeur maximale autorisée pour ses types d'entiers. Vous ne devez en aucun cas utiliser plus de 4 Go de mémoire.
En d'autres termes, le programme devrait en principe pouvoir être testé en l'exécutant sur votre ordinateur. Mais à cause de l’ampleur de ce nombre, il vous sera demandé de prouver que le nombre de copies de la chaîne qu’il génère est exactement égal à 10 ^ 100 et que le programme s’arrête ensuite. L'arrêt peut être une sortie, une fin ou même une fin due à une erreur, mais si c'est le cas, l'erreur ne doit générer aucune sortie difficile à séparer de la sortie du programme.
C'est du code-golf , donc la solution avec le moins d'octets gagne.
Exemple de solution (C, non golfé, 3768 octets)
#include <stdio.h>
int main() {
int a00, a01, a02, a03, ..., a99;
for(a00 = 0; a00 < 10; a00++)
for(a01 = 0; a01 < 10; a01++)
for(a02 = 0; a02 < 10; a02++)
for(a03 = 0; a03 < 10; a03++)
...
for(a99 = 0; a99 < 10; a99++)
puts("1");
return 0;
}
Réponses:
Gelée ,
64 octetsIl s'agit d'un lien niladique (fonction sans arguments) qui imprime 10 200 copies de la chaîne 100 , ce qui signifie qu'il imprime 10 100 copies de la chaîne composée de 10 100 copies de la chaîne 100 .
Essayez-le en ligne!
Notez que l'interprète en ligne coupe la sortie à 100 Ko pour des raisons pratiques. Le code fonctionne également comme un programme complet, mais en raison d'une sortie implicite, ce programme en imprime une copie de trop.
Comment ça fonctionne
la source
10^100
copies de la sortie originale (10^100
copies d'une chaîne) va un peu loin, même pour deux octets entiers. L'avez-vous déjà soumis au défi "Le score correspond à la longueur de la sortie / du programme, les gains les plus élevés" à ce jour?Fuzzy Octo Guacamole,
13121110 octetsExplication:
Echantillon de la chèvre imprimé:
la source
Python, 28 octets
-1 octet grâce à Jonathan Allan!
Python 2:
Python 3 (30 octets):
la source
i=10**100
Newlinewhile i:print();i-=1
enregistre un octet. Économisez deux autres en utilisant Python 2 avecwhile i:print;i-=1
Haskell, 28 octets
Concatène 10 ^ 100 copies de la chaîne
"1"
et l’imprime.la source
s=[1..10^100]>>"1"
format de réponse est -il autorisé?s
de votre exemple n'imprime pas - ou si vous utilisez le REPL entoure le1
avec"
. Je suppose queputStr$[1..10^100]>>"1"
sansmain=
cela, ça irait, mais je voulais soumettre un programme complet.Brainfuck,
48018811410698 octetsJuste parce que cela doit être fait.
Suppose des cellules 8 bits avec habillage. Imprime 250 255 octets NUL, soit 10 100 fois 10 155 fois 25 255 octets NUL.
Explication:
>>>>>>
est nécessaire pour laisser un peu d’espace de travail.-
produit 255.[[->>>+<<<]------>>>-]
transforme ceci en 255 copies de la valeur 250, donnant une bande qui ressemble à:<<<[<<<]+
déplace le pointeur de données vers l'arrière et termine les données initiales:Vient ensuite la boucle:
[+...-]
initialise le 1 à 2, ce qui revient à 1 à la fin de la boucle. La boucle se termine lorsque le corps de la boucle a déjà défini 2 sur 1.Maintenant, les nombres 2 250 250 250 ... 250 représentent un compteur, en base 250, avec chaque nombre un supérieur au chiffre qu'il représente.
[>>>]<<<
se déplace tout à fait à droite. Puisque chaque chiffre est représenté par un nombre différent de zéro, ceci est trivial.->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-
diminue le compteur de 1. À partir du dernier chiffre: le chiffre est décrémenté. Si cela reste positif, nous avons fini. S'il atteint zéro, définissez-le sur 250 et continuez avec le chiffre précédent.[<<<].>>>
déplace le pointeur vers le chiffre le plus à gauche, ce qui est un bon moment pour imprimer un octet NUL. Puis repositionnez exactement le chiffre le plus à gauche pour voir si nous avons terminé.Pour vérifier l'exactitude, modifiez l'initiale
-
en+
pour imprimer 250 1 NUL octets,++
pour 250 2 , etc.la source
C, 51 octets
La fonction
g()
appelle la fonction récursivef()
à la profondeur 99.Sont exclus les sauts de ligne inutiles ajoutés entre
f()
etg()
pour plus de clarté.Imprime les nouvelles lignes 1E100.
Déclaration de
i
deuxième paramètre def()
non garantie de fonctionner dans toutes les versions de C. Testé sur ma propre machine (GCC sur CygWin) et sur ideone.com (je crois qu'ils exécutent également GCC), mais pas jusqu'à f (99) pour des raisons évidentes les raisons!la source
f()
environ 1980 octets. Lesputs
vidages des nouvelles lignes vers l'API et l'API doivent générer et vider le tampon si nécessaire.f
écritures dans une pile) ne vous attendez pas à). clang met en garde contre "trop peu d'arguments dans l'appel à 'f'", dans-std=c89
et-std=c99
, de sorte que la définition agit comme une déclaration avec un nombre spécifique d'arguments. Mais j'oublie; Je pense que cela pourrait signifier que le compilateur sait que la fonction attend 2 arguments, et laissera toujours de la place pour un second argument.g
et sa fonction d'assistancef
.main
serait plus long. Si vous regardez bien, il y a quelques autres soumissions de fonctions ici.Code machine du Commodore VIC 20 (40 octets)
... affiché en hexadécimal:
( En route en utilisant:
SYS 4160
)Signification des octets entre parenthèses
Est-ce une faute de frappe?
Nous avons l'année 1981.
Un ordinateur à la maison typique a 1 à 16 K B de RAM! Et vous trouverez difficilement des modèles professionnels ayant 1 M ou plus.
(Ok. Juste une blague.)
Le programme a été testé avec d’autres bases et exposants. Je ne doute pas que cela fonctionnera également avec 100 et 50.
Au moins, il ne tombe pas en panne avec ces chiffres (mais ne se termine pas non plus dans un temps mesurable).
La taille de la mémoire est suffisante pour un exposant de 50 et 100 est inférieur à 127, une base de 100 ne devrait donc pas poser de problème.
L'idée de base
Il existe un compteur à 50 chiffres qui compte dans le système 100. Les octets 0x01-0x64 représentent les chiffres 0 à 99. Le premier octet dans le compteur est le chiffre le plus bas. Le dernier octet du compteur (chiffre le plus élevé) est suivi d'un octet avec la valeur 0x00.
Le compteur a la valeur initiale 100 ^ 50.
Une boucle externe écrit un octet sur le "canal actuel" ("sortie standard" sur les systèmes modernes; généralement l'écran), puis décrémente le compteur.
La décrémentation se fait par une boucle interne: elle décrémente un chiffre et, dans le cas d’un dépassement insuffisant, de 1 à 99, elle passe au chiffre suivant. Si l'octet 0x00 à la fin du compteur est décrémenté, le programme s'arrête.
Le code d'assemblage est
MODIFIER
Le programme fonctionne également sur le Commodore C64!
la source
Noeud, 89 octets
Sorties 10 100 nouvelles lignes. (Théoriquement, c’est-à-dire tester en remplaçant
100
par1
10 1 nouvelles lignes à la place.)Cela fonctionne en mettant
i
à la chaîne(100 zéros et un 1; un googol inversé), puis à plusieurs reprises "soustraire 1" avec un remplacement de regex et générer une nouvelle ligne jusqu'à ce que la chaîne soit entièrement à zéro.
Un port de la réponse C ++ aurait 49 octets:
la source
05AB1E , 6 octets
Explication
la source
Ruby, 20 octets
Imprime 1 suivi d'une nouvelle ligne 1E100 fois.
1E100
ne fonctionne pas car il s’agit d’un nombre flottant et non d’un nombre entier de précision arbitraire.la source
10**(100.times{p 1})
1E100.to_i
évalué à 10000000000000000001590289110999998080838380808563945281389781327557747838772170389288175858158105 sur mon ordinateur./// , 36 caractères ASCII (4 distincts)
Sort le
.
caractère 3 * 10 ^ 125 fois, ce qui signifie qu'il sort la chaîne composée de 3 * 10 ^ 25 répétitions du.
caractère, 10 ^ 100 fois.Explication:
/t./.ttttt/
: Remplacert.
par.ttttt
tout au long du programme, en répétant jusqu'à ce qu'il net.
reste plus aucune instance . Ceci remplacet...
par...
suivi de 125t
s./.t/t\........../
: Remplacer.t
part..........
tout au long du programme, en répétant jusqu'à ce qu'il ne.t
reste plus aucune instance . Cela prend le...
suivi de 125t
s et le transforme en 125t
s suivi de 10 ^ 125 occurrences de...
./t//
: Supprimer tous lest
s restants .t...
: Ceci est remplacé par 3 * 10 ^ 125.
s. Les sortir.Maintenant, produire 10 ^ 100 répétitions de 3 * 10 ^ 25 répétitions de quelque chose ressemble à de la triche. Ce programme génère le
.
caractère exactement 10 à 100 fois, en utilisant 45 caractères ASCII:Explication de celui-ci:
/T/tttttttttt/
: RemplacerT
partttttttttt
tout au long du programme. Cela remplaceTTTTTTTTTT
par 100 répétitions det
./.t/t........../
: Remplacer.t
part..........
tout au long du programme. Cela prend le.
suivi de 100t
s et le transforme en 100t
s suivi de 10 ^ 100.
s./t//
: Supprimer tous lest
s restants ..TTTTTTTTTT
: Ceci est remplacé par 10 ^ 100.
s. Les sortir.Enfin, voici un programme de compromis, qui génère le
.
caractère 2 * 10 ^ 100 fois, en utilisant 40 caractères:la source
Befunge 93, 33 octets
Malheureusement, Befunge n'a pas de fonction d'alimentation, donc la quasi-totalité de ce code est ma mise en œuvre d'une fonction d'alimentation. Je travaille toujours sur ça.
Explication:
1
: Commencez par1
en haut à gauche afin que lorsque nous nous multiplions, nous n'obtenions pas à0
chaque fois.01g
: récupère le caractère à la position (0, 1), c’est-à-d
dire dont le code ASCII est 100.0`
: voir si la valeur stockée dans (0, 1) est supérieure à 0; cette valeur va changer.#@!# _
: Logique pas!
à la valeur que nous obtenons de la dernière étape (0 ou 1), donc si c'est 1, maintenant nous avons 0, et nous notons que cela#
signifie que vous sautez le caractère suivant dans le code.01g 1- 01p
: Reprendre la valeur stockée dans (0, 1), en soustraire 1 et stocker cette nouvelle valeur à (0, 1)25**
: multipliez la valeur supérieure de la pile par 101.
: imprimer1
chaque fois que cela boucle1
est imprimé (en théorie) fois googol, mais cela court rapidement de la page que j'ai testé cela.Vous pouvez exécuter le code Befunge 93 ici . Pour une raison quelconque, la valeur la plus élevée de la pile est
1.0000000000000006e+100
celle qui devrait l'être1.0e+100
. Je ne sais pas d'où cela6
vient, mais je ne pense pas que cela devrait être là et que cela pourrait être une erreur d'arrondi ou quelque chose du genre.la source
ABCR , 56 octets
Les tarpits de Turing sont amusants, surtout quand ils n'ont pas de multiplication ou d'exposants faciles. D'autre part, je n'avais besoin que de deux des trois files d'attente!
Explication:
la source
Lot,
574242 octetsChaque boucle passe alors en exécutant une itération supplémentaire. Les boucles sont limitées à ~ 2³² en raison de la limite de nombre entier 32 bits. Les quatre premières boucles comptent chacune 2²⁵ pour un total de 2¹⁰⁰, tandis que les dix boucles restantes comptent chacune 5¹⁰ pour un total de 5¹⁰⁰.
Edit: Enregistré un impensable de 58% grâce à @ ConorO'Brien.
la source
TI-Basic, 20 octets
Simple. Seules huit lignes sont affichées en même temps et les lignes précédentes ne restent pas en mémoire. Parce que
ᴇ100
n'est pas supporté, nous devons boucler de-ᴇ99
à9ᴇ99
. Ensuite, siI!=0
, affichez la chaîne (qui est d'ailleurs égale à 3). De cette façon, nous l’imprimons exactement au bonᴇ100
moment.la source
Fonction du code machine x86-64, 30 octets.
Utilise la même logique récursive que la réponse C par @level rivière St . (Profondeur maximale de récursivité = 100)
Utilise la
puts(3)
fonction de libc, à laquelle les exécutables normaux sont liés de toute façon. Il est appelable à l'aide de l'ABI System V x86-64, c'est-à-dire à partir de C sous Linux ou OS X, et n'empiète pas sur les registres non prévus.objdump -drwC -Mintel
sortie, commentée avec explication0x040035e - 0x0400340 = 30 bytes
Construit avec
yasm -felf64 -Worphan-labels -gdwarf2 golf-googol.asm && gcc -nostartfiles -o golf-googol golf-googol.o
. Je peux publier la source NASM d'origine, mais cela semblait être une image de fond, car les instructions asm sont exactement là dans le désassemblage.putchar@plt
est à moins de 128 octets de lajl
, alors j'aurais pu utiliser un saut court de 2 octets au lieu d'un saut de près de 6 octets, mais ce n'est vrai que dans un exécutable minuscule, pas dans le cadre d'un programme plus important. Donc, je ne pense pas pouvoir justifier de ne pas prendre en compte la taille de la mise en œuvre de libc si je profite également d'un codage jcc court pour l'atteindre.Chaque niveau de récursivité utilise 24B d’espace de pile (2 envois et l’adresse de retour transmise par CALL). Toutes les autres profondeurs appellent
putchar
avec la pile alignée uniquement par 8 et non 16, ce qui constitue une violation de l’ABI. Une implémentation stdio qui utilisait des magasins alignés pour renverser des registres xmm sur la pile serait défaillante. Mais glibc'sputchar
ne fait pas cela, écrire dans un tube avec mise en mémoire tampon complète ou écrire sur un terminal avec mise en mémoire tampon de ligne. Testé sur Ubuntu 15.10. Cela pourrait être corrigé avec un push / pop factice dans le.loop
, pour décaler la pile de 8 autres avant l'appel récursif.La preuve qu'il imprime le bon nombre de nouvelles lignes:
Ma première version était 43B, et utilisée
puts()
sur un tampon de 9 nouvelles lignes (et un octet final 0), donc put ajouter le 10ème. Ce cas de base de la récursivité était encore plus proche de l'inspiration en C.Factoriser 10 ^ 100 d'une manière différente aurait peut-être pu raccourcir la mémoire tampon, peut-être même réduire à 4 lignes, économiser 5 octets, mais utiliser putchar est de loin meilleur. Il n'a besoin que d'un argument entier, pas d'un pointeur, et pas de tampon du tout. Le standard C autorise les implémentations pour lesquelles c'est une macro
putc(val, stdout)
, mais dans glibc, il existe une fonction réelle que vous pouvez appeler depuis asm.Imprimer seulement un saut de ligne par appel au lieu de 10 signifie simplement que nous devons augmenter la profondeur maximale de récursivité de 1, pour obtenir un facteur supplémentaire de 10 sauts de ligne. Étant donné que 99 et 100 peuvent tous deux être représentés par un signe immédiat étendu sur 8 bits,
push 100
n’a encore que 2 octets.Mieux encore, la présence
10
dans un registre fonctionne à la fois comme une nouvelle ligne et un compteur de boucles, ce qui enregistre un octet.Idées pour économiser des octets
Une version 32 bits pourrait économiser un octet pour le
dec edi
, mais la convention d'appel stack-args (pour les fonctions de bibliothèque telles que putchar) facilite le travail de suivi d'appels et nécessiterait probablement davantage d'octets à plusieurs endroits. Je pouvais utiliser une convention register-arg pour le privéf()
, uniquement appelé parg()
, mais je ne pouvais pas ensuite appeler putchar (car f () et putchar () prendraient un nombre différent d'arguments stack).Il serait possible que f () conserve l'état de l'appelant au lieu d'effectuer la sauvegarde / restauration dans l'appelant. Cela ne sert probablement à rien, cependant, car il faudrait probablement qu'il se place séparément de chaque côté de la branche et que cela ne soit pas compatible avec le suivi des appels. J'ai essayé mais je n'ai trouvé aucune économie.
Garder un compteur de boucle sur la pile (au lieu de pousser / décompresser rcx dans la boucle) n'a pas aidé non plus. C'était 1B pire avec la version qui utilisait des options de vente, et probablement encore plus d'une perte avec cette version qui met en place rcx à moindre coût.
la source
PHP, 44 octets
Cet extrait affichera les
1
temps googol. Il ne manquera pas de mémoire, mais il est terriblement lent. J'utilise BCMath pour pouvoir gérer des entiers longs.Un peu plus performant, mais pas aussi petit (74 octets):
Va afficher la lettre
a
fois googol. Il consomme près de 4 Go de mémoire et génère environ 4e9 caractères à la fois.la source
a
, c'est une chaîne de 4 * 10 ^ 9a
s. Il n'y a aucun moyen de ne pas dépasser les 4 Go si vous voulez en mettre 3 fois plusa
. Ob_flush n’a rien à voir avec cela, l’intérêt du deuxième exemple est de sortir de grandes chaînes en une seule fois au lieu de produire de petites quantités de caractères à chaque fois, ce qui permet au programme de tourner un peu plus vite, au prix d’une utilisation plus importante de la mémoire.Haskell,
4543 octetsla source
Pyke,
65 octetsEssayez-le ici!
Non testé car il bloque mon navigateur. Les 4 premiers caractères génèrent 10 ^ 100 et
V
impriment beaucoup de nouvelles lignes. Testez avec100V
.la source
Raquette 36 octets
Sortie:
la source
JAISBaL , 4 octets
Chrome ne peut pas lire tous les symboles et je ne suis pas sûr des autres navigateurs. Voici donc une image:
Explication:
Assez simple .... imprime juste un espace googol. Trois instructions, mais la constante de googol est deux octets.
(Écrit dans la version 3.0.5)
la source
JavaScript ES6,
8583 octets2 octets sauvés grâce à ETHproductions!
Ceci imprime 1e100 nouvelles lignes.
La partie interne génère ce programme, qui est ensuite évalué.
Maintenant, pour une preuve d'exactitude, nous allons utiliser une induction. Nous allons substituer les 100 initial pour d' autres valeurs, génériquement N . Je prétends que l'insertion de N donnera 10 N nouvelles lignes. Envoyons le résultat à
wc -l
, qui compte le nombre de nouvelles lignes dans l’entrée. Nous allons utiliser ce script modifié mais équivalent qui prend l’entrée N :Maintenant, voici quelques résultats:
Nous pouvons voir que cela transforme l'entrée N pour les petites valeurs en 10 N lignes nouvelles.
Voici un exemple de sortie pour N = 1:
la source
eval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")
Mathematica,
483025 octetsSortie:
la source
For[n=0,n++<10^100,Echo[]]
?>>
partie principale de la sortie. Ils sont imprimés si vous utilisezEcho
sur la console.Echo@0&~Array~10^100;
de 21 octets?Fortran 95, forme libre, récursive, 117 octets
Imprime un googol de lignes contenant
Fortran 90, récursif, 149 octets
L'appel récursif de 100 boucles imbriquées, toutes les 10 itérations, donne exactement un googol. Les compteurs N, L et de boucle tiennent tous dans des entiers de la taille en octets.
Testé en remplaçant 99 par 1, 2, 3, 4, 5 et en notant que dans chaque cas, le nombre de lignes résultant de "wc" a n + 1 zéros.
Fortran II, IV, 66 ou 77, 231 octets:
Imprime un googol de nouvelles lignes.
Tous ces programmes fonctionneront sur des machines 32 bits; En fait, les versions récursives fonctionneraient parfaitement sur une machine 16 bits. On pourrait utiliser moins de boucles dans la version brute-force en exécutant sur un ancien Cray avec ses entiers 60 bits. Ici, dix boucles imbriquées de 2 * 10 ^ 9 dans une boucle de 5 ^ 10 (9765625) sont égales à 10 ^ 100 itérations totales.
Aucune des versions n'utilise de mémoire pour parler d'autre que du code d'objet lui-même, des compteurs, d'une copie de la chaîne de sortie et, dans la version récursive, d'une pile de retour de niveau 100.
Vérifiez les facteurs en comparant
la source
Simulateur de machine de Turing, 1082 octets
Simulateur de turing machine
Je ne sais pas si cela compte comme la sortie correcte, car il y a 82 espaces de début.
Je ne sais pas si cela respecte la limite de 4 Go. Par conséquent, si ce n'est pas le cas, il est non compétitif et juste pour la vitrine. La sortie est 1e100 octets, donc cela devrait être déduit du nombre d'octets mémoire. Le nombre final d'octets est de 82 octets.
Voici une explication:
Les 80 premières lignes de code sont 80 états différents qui génèrent le nombre de boucles en base 19 1
6EC1BCF4688309GH806H932ADCC44EEG6DE0FE9FAHDE66DGH108C9G3623E045A0H7A95AB594CE99A
.Les 19 lignes de code suivantes constituent l'état du compteur, qui décrémente le compte chaque fois qu'un caractère est imprimé.
Les 6 lignes suivantes correspondent à l’état de l’imprimante, qui ajoute un
=
.Enfin, les deux dernières lignes indiquent l'état de nettoyage, ce qui est nécessaire pour s'assurer que la seule sortie est
=====...=====
. Les espaces de début / fin ne comptent pas comme une sortie, car ils constituent des effets secondaires inévitables.Le programme s'arrête alors.
1 J'ai fait le calcul pour ça.
la source
Pyth, 7 octets
Nouveau (en compétition)
Explication
Ancien (non concurrent) 7 octets
Explication
la source
*TT
soit plus court qu'une plaine100
.Python 3, 32 octets
Solution alternative, 33 octets:
la source
range(10**100)
crée une liste de nombres[1, 2, 3, 4, ...]
, ce qui entraîneOverflowError: range() result has too many items
. Cela fonctionnerait dans Python 2 avec un appel à laxrange()
place, et fonctionne dans Python 3 car axrange()
été renommé enrange()
, et l'originalrange()
qui générait une liste était obsolète.Java,
198179155 octetsPrints (
x
==null
?:null
Une chaîne qui commence par[La;@
ou quelque chose comme ça) 10 à 100 fois en temps O (éternel).la source
class
, mais pas depublic static void main(String[]a)
méthode. En ce qui concerne les conseils de golf: vous pouvez remplacer lenew BigInteger("0")
,new BigInteger("1")
etnew BigInteger("10")
parBigInteger.ZERO
,BigInteger.ONE
etBigInteger.TEN
; vous pouvez remplacerimport java.math.BigInteger;
parimport java.math.*;
.java.math.BigInteger b=null;for(b=b.ZERO;!(b=b.add(b.ONE)).equals(b.TEN.pow(100);)System.out.print(x);
b
est nulle.Java, 153 octets
Sortie: 1e100 1s
Je sais qu'il existe une autre réponse Java qui est également assez proche. Le mien a une main et est toujours plus court cependant.
Ceci est ma première entrée code-golf. Conseils appréciés.
la source
import java.math.*;()->{for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);};
javac
ne me laisserai pas compiler ceci.Pyth,
87 octetsLien
La solution est testée avec une petite sortie, mais elle devrait imprimer
abcdefghijklmnopqrstuvwxyz
1e100 fois.Pour une raison quelconque, l'
p
était inutile, comme 31343 (Maltysen) dit .la source
p