Défi
Écrivez l'extrait de code le plus court possible de sorte que, lorsque N copies de celui-ci sont concaténées ensemble, le nombre de caractères sortis soit N 2 . N sera un entier positif.
Par exemple, si l'extrait était soln();
, alors l'exécution soln();
afficherait exactement 1 caractère, et l'exécution soln();soln();
imprimerait exactement 4 caractères, et l'exécution soln();soln();soln();
imprimerait exactement 9 caractères, etc.
Tous les caractères peuvent être dans la sortie tant que le nombre total de caractères est correct. Pour éviter toute confusion entre les systèmes d'exploitation, les \r\n
sauts de ligne sont comptés comme un seul caractère.
Les programmes ne peuvent pas lire leur propre source, lire la taille de leur fichier ou utiliser d'autres failles de ce type. Traitez cela comme un défi de quine strict .
La sortie peut aller vers stdout ou un fichier ou une alternative similaire. Il n'y a aucune entrée.
Les commentaires dans le code sont corrects, tout comme la sortie en cours d'exécution.
Tous les caractères peuvent être dans le programme. La soumission la plus courte en octets l' emporte.
la source
Réponses:
TECO, 4 octets
V
imprime le contenu de la ligne actuelle dans le tampon de texte.1\
insère la représentation sous forme de chaîne du numéro 1 à la position actuelle.Ainsi, à la N ème itération du programme, le premier
V
affichera N - 1 copies du caractère1
, puis en ajoutera un autre1
au texte, puis affichera N1
s.la source
Brainfuck,
1716 octetsVous pouvez le tester ici . Utilisez simplement le fait que .
n2+2n+1=(n+1)2
la source
Brainfuck, 11
J'ai vu la première réponse de Brainfuck et j'ai pensé que c'était beaucoup trop long :)
La sortie peut être plus facile à voir si vous remplacez le plus par beaucoup plus de plus.
À la Nième itération, chaque boucle génère N - 1 copies du caractère avec la valeur ASCII 1, puis une de plus avec
+.
.la source
Python 2, 22
Imprime la chaîne vide, puis deux
x
, puisx
quatre et ainsi de suite. Avec la nouvelle ligne après chaque chaîne, cela ressort desn*n
caractères.Un exemplaire:
"\n"
(1 caractère)Deux exemplaires:
"\nxx\n"
(4 caractères)Trois exemplaires:
"\nxx\nxxxx\n"
(9 caractères)Afin d'empêcher la
a
réinitialisation de la variable initiale à chaque exécution, je termine le code par un;a
, qui est bénin en soi, mais combiné avec la boucle suivante pour créer le bouc émissaireaa
à affecter à la place. Cette astuce n'est pas la mienne; Je l'ai vu dans une réponse précédente. J'apprécierais si quelqu'un pouvait me pointer pour que je puisse donner du crédit.la source
,
aprèsprint a
devrait fonctionner.print a
imprime une nouvelle ligne après chaque impression.CJam, 6 octets
Utilise le fait que .
n2 + n + (n+1) = (n+1)2
la source
:L..1+
est la même idée dans GolfScript...n+
dans GolfScript, mais ce triste trait de fin embêtant ... :(:L
car il n'est pas utilisé./// , 21 octets
Je suis sûr qu'il existe un moyen très court et tordu de résoudre ce problème dans /// mais je n'ai encore rien trouvé, au-delà de la méthode "simple":
Ceci est basé sur l'approche consistant à imprimer des nombres impairs consécutifs. L'extrait se compose d'un
1
au début qui est imprimé et de deux remplacements qui ajoutent deux1
s supplémentaires à cette première partie de chaque copie consécutive de l'extrait. Passons par là pourN = 3
. Les éléments suivants doivent être lus par groupes de 3 lignes ou plus: 1. le code actuel, 2. le (s) jeton (s) traité (s), 3. (et les suivants) un commentaire sur ce que fait le jeton ci-dessus.Fait intéressant, cela fonctionne aussi bien si nous passons
1
à la fin:la source
> <> , 14 octets
Utilise la "somme d'entiers impairs consécutifs à partir de 1". Il commence par 1 et le multiplie par 100 à chaque fois, augmentant progressivement la longueur de la sortie par incréments de 2.
Par exemple, ajouter 5 copies donne
J'ai testé en redirigeant la sortie vers un fichier et je n'ai pas vu de nouvelle ligne de fin.
Panne
la source
CJam,
109 octetsCela imprime N 2 espaces où
N
est le nombre de copies du code.Extension du code :
Essayez-le en ligne ici
la source
Python 2, 20 octets
la source
Java - 91 octets
Cette solution est équivalente à cette autre en Python. Ça ne gagnera sûrement pas, mais c'était amusant :)
la source
Perl, 14 octets
Cela doit être exécuté avec le
-l
commutateur de commande de Perl , ce qui provoque l'print
ajout de nouvelles lignes.Il imprime la variable par défaut
$_
, puis ajoute deux traits de soulignement par substitution.Exemple:
la source
say
?-E
place.Brainfuck, 10 caractères
Les deux solutions précédentes étaient Brainfuck waaay trop long (16 et 11 caractères) voici donc une plus courte:
Dans le
n
-ième bloc, il imprime les2*n-1
caractères (avec les points de code de2*n-1
à1
)la source
Prélude ,
1812 octetsCela imprime N 2 onglets. Il suppose un interprète conforme aux normes qui imprime des caractères au lieu de chiffres, donc si vous utilisez Python interprète vous aurez besoin de mettre
NUMERIC_OUTPUT
àFalse
.L'idée est simplement d'utiliser le haut de la pile (qui est initialement 0) comme
2(N-1)
, et d'imprimer les2N-1
onglets, puis d'incrémenter le haut de la pile de 2. Par conséquent, chaque répétition imprime le nombre impair suivant d'onglets.la source
Java - 59/44 (selon les besoins)
Apparemment, nous sommes autorisés à supposer que le code s'exécute dans une classe.
S'il peut entrer dans une méthode principale:
la source
C, 87 octets
Cela utilise deux macros magiques.
__COUNTER__
est une macro qui se développe jusqu'à0
la première utilisation,1
la seconde, etc. C'est une extension de compilateur, mais elle est disponible dans gcc, clang et Visual Studio au moins.__FILE__
est le nom du fichier source. Inclure un fichier en C / C ++ équivaut littéralement à le coller directement dans votre code source, il était donc un peu difficile à utiliser.Il serait toujours possible d'utiliser cette technique sans
__COUNTER__
. Dans ce cas, la protection standard contre l'utilisation de code deux fois peut être utilisée pour l'#if
instruction et__LINE__
peut être utilisée pour compter le nombre de caractères nécessaires.la source
Dyalog APL,
2019 octetsUne solution basée sur une matrice.
Essayez-le ici . Renvoie une chaîne de répétitions de . Explication par explosion pour :
N2
a
N = 2
la source
STATA 20
Il y a une nouvelle ligne de fin pour vous assurer que l'instruction display (di) fonctionne. Affichez d'abord le numéro actuel dans $ a sauts de ligne (et un supplémentaire par rapport à l'affichage par défaut). Ajoutez ensuite 2 à $ a.
Utilise l'approche des nombres pairs (c'est-à-dire l'approche des nombres impairs moins 1) avec une nouvelle ligne supplémentaire à chaque fois.
la source
T-SQL 117
Notez l'espace de fin pour vous assurer que la condition if est correctement vérifiée à chaque fois.
Utilise l'approche des nombres impairs. Je ne sais pas s'il y a une nouvelle ligne sur certaines instructions.
Je ne sais pas s'il existe un moyen plus court de créer une table si elle n'existe pas.
la source
PostScript, 35 caractères
Chaque passage "fuit" une chose sur la pile,
count
augmente donc de 1 à chaque fois. Ensuite, il utilise la somme des nombres impairs.Les octets en sortie sont tous
\000
parce que c'est la valeur initiale des chaînes.la source
Haskell, 72
Explication
L'opérateur d'application
$
agit comme si vous placez des parenthèses autour du reste de la ligne (il existe des exceptions, mais cela fonctionne dans ce cas).aputStr
est une fonction qui prend une chaîne au format "abc ...", où "abc" est la racine carrée de la longueur de la chaîne, y compris abc. Il analysera la chaîne comme un entier et retournera une chaîne commençant par abc + 1 et ayant cette longueur au carré. En raison de l'$
opérateur, cela sera appelé récursivement sur "1" N fois.la source
Pyth, 8 octets
Cela repose sur le fait que N 2 est égal à la somme des
N
nombres impairs. Maintenant, Pyth imprime automatiquement une nouvelle ligne, donc je dois simplement imprimer desZ * 2
caractères dans chaque code oùZ
va de0
àN - 1
.Expansion du code :
Essayez-le en ligne ici
la source
Golflua, 23 octets
affiche une combinaison de caractères
&
et\n
.Code Lua équivalent
Chaque fois que l'extrait de code s'exécute, il produit 2 caractères de sortie de plus que la dernière fois, en commençant par 1 caractère. La
print
fonction ajoute une nouvelle ligne, donc j'initialise X à 0 au lieu de 1.la source
ActionScript - 27/26 octets
ou
Comment ça marche:
Il commente simplement la première ligne. Remarque:
trace
ajoute une nouvelle ligne. Ou peut-être que tous les IDE que j'utilise le font automatiquement.la source
GML, 27
la source