PPCG n'a pas déjà assez de quines ...
Défi:
Votre tâche consiste à créer un programme "A0". Lorsque ce programme est exécuté sans entrée, il ne produit rien. Lorsque ce programme est exécuté avec une entrée, il génère "A1". Lorsque "A1" est exécuté sans entrée, il génère "A0". Lorsque "A1" est exécuté avec une entrée, il affiche "A2". À peu près, «A (k)» affichera «A (k-1)» lorsqu'il sera exécuté sans entrée et affichera «A (k + 1)» lorsqu'il sera exécuté avec une entrée.
Détails
Je crois que ce défi est assez simple; il n'y a pas vraiment d'autres règles. Soit dit en passant, chaque programme doit contenir au moins 1 octet. Vous pouvez supposer que l'entrée ne sera composée que de caractères ASCII et vous pouvez ignorer les espaces blancs si vous le souhaitez, mais vous ne pouvez pas spécifier une entrée spécifique. La sortie peut être vers STDOUT ou STDERR, mais tous vos programmes doivent sortir vers le même. L'autre peut également contenir du texte (vous pouvez donc exporter vers STDOUT puis quitter avec une erreur). Merci à @Dennis de l'avoir signalé.
Tous les programmes doivent être dans la même langue et chaque programme doit être unique des autres.
Le score est égal à la durée du programme "A0". Comme c'est un défi de code-golf, le score le plus bas gagne!
Réponses:
Pip , 28 octets
Essayez-le en ligne!
Explication
Il s'agit d'une version modifiée de la quine Pip la plus courte connue
V Y"`V Y`.RPy"
. Ce quine fonctionne en définissant une chaîne, en la tirant dans lay
variable, puis en l'évaluant. Lorsqu'elle est évaluée, la chaîne prend la repr dey
(encapsulant ainsi la valeur dey
entre guillemets) et concatène le motif littéral`V Y`
au début de celui-ci.Notre stratégie consiste à mettre un
0
dans le programme, puis à remplacer0
par10
s'il y a eu des entrées ou à remplacer10
par0
s'il n'y a pas eu d'entrée. (Ainsi, A ( k ) contiendra un nombre composé de k 1 est suivi par un 0.)0
et10
sont pratiques parce qu'il ya des variables intégrées (i
ett
respectivement) avec ces valeurs, afin que nous puissions les référer à sans utiliser les chiffres réels .Donc, au lieu de
RPy
, nous voulonsRP yRit
s'il y a eu une entrée etRP yRti
sinon. Nous pouvons combiner les deux cas en échangeant les valeurs det
eti
s'il y a input (I#q Sti
), puis en faisantRP yRti
. (Nous devons tester#q
la longueur de l'entrée, car les entrées comme0
sont falsey.)Il ne nous reste plus qu'à obtenir un littéral
0
dans le code et à gérer le cas particulier de A0 ne produisant aucune sortie. Les deux peuvent être résolus en testant0+i
et en retournantu
si c'est falsey:110+i
).i
ett
sont échangés eti
est 10.0+i
est toujours vrai.i
est toujours 0 et0+i
est falsey. Au lieu du quine core, nous produisonsu
, qui est une variable intégrée pour nil. L'impression nulle ne produit aucune sortie.la source
Python 2, 93 octets
Il y a un saut de ligne arrière.
Essayez-le avec entrée | Essayez-le sans entrée
Ceci est modifié de ma réponse à une question similaire.
S'il y a une entrée, elle incrémentera
p
. Ainsi le programme serap=2+...
,p=3+...
etc.la source
input()
et exiger que les entrées soient entourées de guillemets, plutôt que d'utiliserraw_input()
. Si vous souhaitez saisir zéro, utilisez"0"
.