Une quine 1-up est un programme qui ressemble beaucoup à une quine. La principale différence est qu'au lieu de s’imprimer une fois, lorsque n copies du programme sont concaténées, le résultat affiche le programme original n + 1 fois.
Exemple
Si votre programme est Abc123
:
Abc123 -> Abc123Abc123
Abc123Abc123 -> Abc123Abc123Abc123
Abc123Abc123Abc123 -> Abc123Abc123Abc123Abc123
Défi
Votre défi est de créer la plus courte quine valide dans toutes les langues. Les règles habituelles de quine s'appliquent, vous ne pouvez donc pas:
- Soumettez le programme vide.
- Lire directement ou indirectement 1 le code source.
- Utilisez les éléments intégrés de Quining.
C'est du code-golf, donc le code le plus court en octets gagne.
1 Cela n'inclut pas l'utilisation d'une chaîne codée en dur ou d'un bloc de code dans le cadre de votre programme.
code-golf
quine
code-generation
ETHproductions
la source
la source
n
est limité par une restriction de type de données (taille maximale, etc.)?Réponses:
GolfScript, 12 octets
Essayez-le en ligne!
Explication
Cela combine les idées de la quine standard de GolfScript:
Et ma quine récemment découverte :
L’idée principale est d’utiliser à nouveau
n
ce qui est imprimé implicitement à la fin du programme afin d’obtenir la copie supplémentaire de la quine. Étant donné que l’affectation de la variable ne change rien lorsqu’elle est répétée dans les copies suivantes, cela n’ajoute qu’une copie. Voici une ventilation du code:la source
GolfScript, 12 octets
Essayez-le en ligne!
Comment fonctionne le code source
Si le code source ci-dessus est exécuté une fois, la pile finira par
où la chaîne vide au début correspond à l'état initial de la pile (entrée vide).
Deux copies du code source laisseraient un état final de
trois copies un état final de
etc.
Qu'est-ce qui se passe ensuite
Après avoir exécuté le code source, l'interpréteur effectue les opérations suivantes.
Il enveloppe la pile entière dans un tableau et pousse ce tableau sur la pile.
Pour deux copies du code source, la pile contient maintenant
Il s'est exécuté
puts
avec l'intention d'imprimer la pile enveloppée, suivie d'un saut de ligne.puts
est défini comme{print n print}
suit:print
imprime la copie enveloppée de la pile sans l'inspecter (c'est-à-dire sans la convertir en représentation sous forme de chaîne). Cela envoie(le code source) sur STDOUT et affiche la copie de pile au sommet de la pile.
La pile contient maintenant
exécute le bloc de code défini précédemment.
:
commence par sauvegarder[{: ".~"][} ".~"]
dans le caractère espace, puis se".~"
pousse,]
enveloppe le".~"
dans un tableau et[
définit un nouveau marqueur de tableau.n
pousse une chaîne composée d'un seul saut de ligne.La pile contient maintenant
est exécuté une fois de plus. Cependant, il a été redéfini lorsque nous l'avons appelé pour la première fois et contient maintenant un tableau, pas un bloc de code.
En fait, il pousse
[{: ".~"][} ".~"]
, laissant la pile commeEnfin,
print
imprime le dernier élément de la pile sans l'inspecter, puis l'envoyerSTDOUT, 1-up le code source.
la source
Javascript ES6 (REPL), 55 octets
2 octets sauvés grâce à @ user81655!
Explication
Voici le cadre standard de quine:
Vous devriez pouvoir voir ce cadre dans la soumission. Plus d'explications ci-dessous.
Ceci est le compteur, par défaut à 1. En gros, il nous dit combien il faut répéter le quine et incrémente en même temps.
C'est la partie quine. Nous répétons essentiellement la chaîne quine par le compteur + 1. Les appels de fonction ultérieurs auront priorité sur la sortie.
la source
a
).var
CJam, 14 octets
Essayez-le en ligne!
Comment ça marche
Une fois la dernière copie du programme exécutée, le tableau contenant le bloc et la chaîne est toujours sur la pile. Il est donc imprimé implicitement.
la source
Groovy, 83 octets
Il y a une nouvelle ligne intégrée et aucune fin de ligne. Cela imprime:
La fonction
f()
imprime une copie de la quine. Le programme initial l'appelle deux fois. La première ligne du code ajouté devient un commentaire et seul le deuxième appel àf()
est exécuté.la source
Ruby, 43 octets
En soi, cela s'imprime
2-0
ou les2
temps. Lorsqu'elle est concaténée à une autre copie de elle-même, l'instruction d'impression finale ressemble à une autre$><<s%s*n=2-01
, ce qui signifie qu'elle ne sort qu'une seule fois (01
étant l'octal 1). Ainsi, seule la copie finale de la chaîne est imprimée deux fois, les autres une fois.L’affectation en ligne à
n
consiste simplement à faire fonctionner correctement l’ordre des opérations; l'état n'est pas réellement transmis d'une copie à l'autre.la source
NodeJS,
63616055 octetscela fonctionnera également en JavaScript (ES6) si vous considérez que plusieurs messages de la console sont séparés par des nouvelles lignes (pas de REPL requise)
2 octets sauvegardés grâce à @ dev-null
notez qu'il y a une nouvelle ligne à la fin du code.
C’était intéressant, c’est l’un de mes favoris pour ce site à ce jour.
Je suis assez confiant que cela ne peut pas être joué beaucoup plus. (peut-être que la
print
fonction de SpiderMonkey ...)Explication
la source
(f=_=
Je suis peut-être un peu trop fatigué.Ruby, 55 octets
Rien de très intéressant ici, c’est juste une quine de rubis normale avec un compteur.
la source
JavaScript (ES6), 164 octets
Fonctionne dans n’importe quelle page de test ou console JS de Firefox, en supposant que l’espace entre deux messages de la console compte comme une nouvelle ligne.
la source
window
àthis
.Perl 6 ,
5853 octetsMerci à Jo King pour -5 octets.
Basé sur la quine de Jo King .
Essayez-le en ligne!
la source
Japt, 40 octets
Testez-le en ligne! Explication à venir.
la source
Y
Non concurrent, 6 octets
Y est un bandeau de tête que je possède depuis un moment et cela m'a inspiré pour l'écrire. Il est fait pour les défis dans lesquels la séquence est la clé, comme celle-ci. Le code est divisé en liens par des caractères "nœud". Dans ce cas, notre code est mis dans deux chaînes (à l'origine), le nœud étant
C
.U
enregistre une chaîne transcendantale, c'est-à-dire une chaîne de liens. Il enregistre jusqu'à en rencontrer un autreU
. Si unU
n'est pas rencontré à la fin de la chaîne, il s'enroule autour. En outre,U
est inclus dans la chaîne par défaut. Après avoir enregistré la chaîne, nous passons au nœudC
, ce qui nous déplace simplement vers le lien suivant.n
pousse le nombre de chaînes. 2. Pour notre séquence de base, il s'agit de 2. Pour une séquence deK
chaînes, il existe desK+2
chaînes, tout comme desK
nœuds.*
est string repittion.p
affiche la pile entière (dans ce cas, une chaîne) etx
termine le programme.Dans un texte:
Essayez-le ici!
la source
U
dehors de quining? (Sur Congrats 7k, btw)Brachylog , 20 octets
Essayez-le en ligne!
Modifié à partir de cette quine.
Lorsque ceci est concaténé avec lui-même, chaque route sauf la dernière échoue et le programme passe à la suivante, les exécutant
w₃
et les retournant au-delà dew₅
la dernière.Essayez-le en ligne!
Essayez-le en ligne!
Essayez-le en ligne!
la source