Dans ce défi, vous construirez un programme qui grandit au fil des âges… jusqu'à 2017.
Défi
Chaque fois que cette description de défi indique «programme», vous pouvez également lire «fonction».
Votre soumission, une fois exécutée, générera un programme de THE LENGTH OF YOUR SUBMISSION
+ 1
octets.
Lorsque ce programme est exécuté, il affichera un programme de THE LENGTH OF YOUR SUBMISSION
+ 2
octets de long… et ainsi de suite.
Cependant , lorsque votre programme a atteint une longueur de 2017 octets, il doit à la place sortir 2017
et quitter.
Règles
- Le résultat du programme final doit être
2017
et seulement2017
. Il peut s'agir d'une chaîne ou d'un entier, mais il doit lire2017
et non2017.0
ou0x7E1
un autre non-sens. - Pas de failles standard .
- Seul votre programme initial est autorisé à nécessiter une entrée, qui sera ajoutée à votre bytecount.
Donc, si votre programme initial comporte 324 caractères et prend une entrée de 13 octets, votre score total sera de 324 + 13 = 337 et le programme émis par celui-ci doit être de 338 octets.- L'utilisation d'indicateurs de ligne de commande (par exemple
perl -X
) est très bien, cependant - tant que votre programme initial ainsi que tous les programmes générés utilisent les mêmes indicateurs. De plus, ils comptent également dans le total des octets. Les tirets, les barres obliques, etc. devant un drapeau de ligne de commande ne comptent pas dans le total, par exemple,perl -X
compte comme un octet supplémentaire.
- L'utilisation d'indicateurs de ligne de commande (par exemple
- Si vous renvoyez une fonction, il doit s'agir d'une fonction réelle et non d'une chaîne qui, lorsqu'elle est évaluée, produit une fonction.
- Les quines incorrects (si votre programme est un quine) sont interdits.
Exemple
Pseudocode, 99 octets
IF (PROGRAM LENGTH == 2017) PRINT 2017 ELSE PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)
Votre soumission peut fonctionner différemment, tant qu'elle respecte les règles ci-dessus.
;;;
autorisé?Réponses:
*> <> ,
292830 octetsEssayez-le ici! (* essayez avec 2017 octets )
* réglez le délai à 0 ms ou vous devrez peut-être attendre longtemps
Cela ajoute une
exécution supplémentaire à chaque sous-séquence. S'il a 2017 octets et est exécuté, il affichera 2017 et arrêtera l'exécution sans aucune autre sortie.
Mise à jour: enregistré 1 octet en vérifiant si la longueur est inférieure à 2017 au lieu d'être égale
Mise à jour 2: sortie fixe pour +2 octets
Explication
la source
when your program has reached a length of 2017 bytes
, pas 2016Python 2.7, 90 octets
En voici une relativement simple:
Essayez la première itération ici! Essayez l'avant-dernière itération ici! Essayez l'itération finale ici!
Non golfé:
la source
p='';...
et1929else
, mais notez que l'impression imprime également une nouvelle ligne à la fin, vous devez donc ajouter une nouvelle ligne à votre programme, sinon elle augmente de deux octets après la première exécution.Microscript II, 38 octets
la source
> <> , 34 octets
Essayez-le en ligne! Notez que, pour tester cela pour des valeurs plus petites, votre valeur (moins 1) doit pouvoir être générée en 7 octets.
Explication
la source
Java, 251 octets (IDE Eclipse)
Cela suppose que le projet a été réalisé dans Eclipse, en utilisant la convention de
.java
fichiers dans le SRC du répertoire de travail. Il existe d'autres moyens de détecter où se trouve la source, mais je ne pense pas que ce soit contraire aux règles.Ouvre essentiellement le code source .java et l'ajoute jusqu'en 2017 (après un commentaire). Lorsque la taille de fichier de la source atteint un total de 2017 octets, elle imprimera à la place 2017.
la source
C, 197 octets
la source
Python 2,
21716778 octetsNotez qu'il devrait y avoir une nouvelle ligne de fin. J'ai utilisé des concepts similaires à ceux utilisés par Calconym, alors merci pour l'inspiration!
Essayez-le en ligne
Essayez en 2016 ; Essayez en 2017
La version précédente:
Ce programme utilise le
inspect
module pour obtenir le numéro de ligne actuel. Ensuite, il s'imprime mais avec une ligne supplémentaire après l'importation, ce qui modifie le numéro de ligne pour le programme suivant. Il devrait également y avoir une nouvelle ligne de fin ici.Essayez-le en ligne
la source
CJam ,
393330 octetsavec l'entrée
Essayez-le en ligne!
Ceci est fonctionnellement équivalent à ma version précédente, sauf qu'il évite d'avoir à écrire et à échapper les guillemets. La version précédente:
Quelles sorties
qui sort
etc. Enfin, le programme
Sorties
2017
.Comment ça fonctionne
Mais que fait réellement le code dans l'entrée?
Si le premier numéro du programme n'est pas égal à 2017, il affichera un programme dans lequel ce nombre est incrémenté une fois de plus qu'il ne l'était cette fois. Si elle est égale à 2017 (c'est-à-dire qu'elle a été incrémentée 1984 fois), appuyez simplement sur 2017 et terminez. Le premier nombre commence par 33 (la longueur du code); chaque incrément augmente la longueur du code de 1 ET ce nombre de 1, donc lorsque 33 a été suffisamment incrémenté pour devenir 2017, le code aura également une longueur de 2017 octets.
la source
JavaScript,
9883 octetsC'était tout un défi… Je suppose que c'est ce que j'obtiens pour exiger le retour de fonctions réelles et pas seulement la source de la fonction.
Fonction originale
J'utilise à la
function
place d'=>
ici car ce dernier ne prend pas en charge les fonctions nommées, il suffit d'assigner des fonctions anonymes à une variable.Première itération
L'exécution de ce qui précède dans la console de votre navigateur renvoie une fonction qui, lorsqu'elle est convertie en chaîne, ressemble à:
Se rendre en 2017
Étant donné que chaque fonction renvoie une nouvelle fonction, vous pouvez appeler la fonction d'origine / son résultat 1934 fois pour obtenir 2017 .
Testé avec Firefox.
la source