Défi:
Créez un programme ou une fonction qui prend une entrée entière, qui génère un nouveau programme / fonction comme spécifié ci-dessous.
Contribution:
Entier n
: temps en secondes avant l'explosion de la bombe à retardement.
Production:
Le programme d'origine qui avait le temps en secondes n
en entrée, sortira un nouveau programme / fonction qui fait ce qui suit:
- Des
n
secondes se sont-elles écoulées depuis l'exécution du programme précédent? ImpressionBOOM!
- Sinon: Imprime un programme / fonction qui, une fois exécuté lui-même, réinitialise le temporisateur à
n
quelques secondes (et agit de la même manière que le premier programme / fonction sorti).
REMARQUE: Ce n'est pas exactement le même que le premier programme / fonction sorti (dans la plupart des langues au moins), car l'heure de début a changé (voir l'exemple de clarification ci-dessous).
Exemple de pseudo-code:
Disons que le programme d'origine est ABC
et l'entrée est en 60
secondes:
ABC
et 60
sorties DEF(60)
.
- Si
DEF(60)
est exécuté dans les 60 secondes, il sortiraDEF_G(60)
, ce qui sera exactement le même queDEF(60)
, mais avec une nouvelle heure de démarrage. - Si
DEF(60)
est exécuté après 60 secondes, il sortiraBOOM!
.
Exemple de clarification de ce que je veux dire par «heure de départ»:
- Le programme de base avec des
60
secondes d' entrée est exécuté à12:00:00
. Il sort le premier programme de sortie avec une heure de début de12:00:00
. - Ce premier programme de sortie avec l'heure de début de
12:00:00
est exécuté à12:00:45
. Il émet un deuxième programme de sortie avec une heure de début de12:00:45
. - Ce troisième programme de sortie avec une heure de début
12:00:45
est exécuté à12:01:25
. Il sort un quatrième programme de sortie avec une heure de début de12:01:25
. - Ce quatrième programme de sortie avec une heure de démarrage
12:01:25
est exécuté à12:05:00
. Il sortiraBOOM!
.
Notez comment la première sortie s'imprime BOOM!
ensuite 12:01:00
, mais le programme de sortie a progressé, même s'il se trouve 12:01:25
à l'étape 3, il restitue le programme suivant au lieu de BOOM!
(car les programmes de sortie de sortie ont des heures de démarrage au-delà de ce premier programme de sortie) .
Règles du défi:
- Les règles de quine par défaut s'appliquent.
- Au moins
n
quelques secondes auraient dû s'écouler. Donc, si l'entrée est60
et l'heure de début était12:00:00
,12:01:00
elle produira toujours le programme v2, mais12:01:01
elle produiraBOOM!
. - Les programmes de sortie ne prendront aucune entrée ( sauf pour un paramètre inutilisé vide s'il est plus court ). L'heure de début doit être donnée aux programmes suivants en tant que valeur «codée en dur» (c'est pourquoi la sortie d'un programme de sortie n'est pas exactement la même que la précédente (dans la plupart des langues).
- Seule la taille de votre programme / fonction principale est comptée en termes d'octets.
- Vous pouvez sortir le programme / la fonction soit sous forme de chaîne (ou dans un format raisonnable comparable, comme un tableau d'octets / caractères / liste), comme fonction si votre langue le prend en charge, soit dans d'autres formats raisonnables (veuillez demander si vous n'êtes pas sûr).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Réponses:
JavaScript, 51 octets
Tester dans le navigateur
ancienne version
Tester dans le navigateur
la source
return()=>
. Et bien que je ne programme presque jamais en JavaScript, j'ai vérifié votre script de test et l'ai même modifié en ajoutant un test pour la fonction de sortie de fonction: testez-le ici avec le quatrième test de fonction de fonction. Tout semble fonctionner, et c'est étonnamment court, je pourrais ajouter, alors +1 de ma part. PS: Dans les règles, il a déclaré qu'il devrait sortir une chaîne au lieu d'une fonction. Mais je vais changer un peu les règles pour permettre les deux. Pourriez-vous peut-être modifier le script afin qu'il génère également les fonctions à enregistrer pendant le test?f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'
devrait fonctionnerJavaScript, 53 octets
Afficher l'extrait de code
Ancienne réponse (le retour devrait être une chaîne)
JavaScript, 78 octets
Afficher l'extrait de code
la source
Java 8, 234 octets
Désolé de poster mon propre défi tout de suite. Il est principalement destiné à clarifier davantage le défi, et je me demandais s'il fallait l'ajouter à la question elle-même ou l'afficher en tant que réponse (et j'ai décidé de l'afficher comme une réponse pour ne pas encombrer le message du défi).
Et même si je voudrais dire que c'est aussi quelque chose à (essayer) de battre, cela ne vaut même pas la peine d'être mentionné car, eh bien ... Java (presque) est toujours battu. ; p
Essayez-le en ligne.
Exemple de sortie:
Essayez la fonction lambda sortie ici.
Exemple de sortie:
Explication:
La fonction principale prend une entrée entière et renvoie une chaîne. Il renvoie essentiellement une fonction qui est une quine, avec l'entrée entière et l'heure de début (en secondes comme horodatage) en tant que valeurs codées en dur.
Fonction principale:
n=60
a été utilisé dans les exemples ci-dessous:Premier programme de sortie:
Deuxième programme de sortie:
Identique au premier programme de sortie, sauf qu'il
70492.687613232
est remplacé par70548
.la source
Perl 5 +
-p
, 88 octetsLes programmes de sortie doivent être exécutés avec
-M5.010
forsay
, mais pas-p
.Essayez-le en ligne!
la source
05AB1E , 50 octets
Peut certainement être joué un peu plus, mais il est assez difficile de produire un semi-quine qui génère un programme de quine avec des valeurs modifiées.
Essayez-le en ligne ou essayez un exemple de 20 secondes .
Explication:
Exemple de programme résultant:
Ce qui est basé sur la Quine par défaut:
"34çìD«"34çìD«
.Voir cette astuce de la mine de 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi
‘ÒÞ!
est"BOOM!"
.Remarque: la raison pour laquelle l'espace est là entre
çì
est parce que sinon, il est interprété comme une chaîne de dictionnaire (triumph
) en raison de la’...’
.la source