Défi
Ecrivez une fonction qui prend un paramètre: un entier t
. Votre fonction doit arrêter votre programme pendant t
quelques secondes avant de continuer, comme time.sleep(t)
dans Python et WAIT t
BBC BASIC.
Vous ne devez utiliser aucune fonction intégrée en attente ni aucune fonction intégrée pour exécuter du code après un certain temps et votre programme doit reprendre après t
quelques secondes.
Pour tester votre fonction, il existe une tolérance de 0,1 seconde supérieure ou inférieure à celle indiquée t
sur votre propre ordinateur: les écarts entre ordinateurs sont corrects.
Si quiconque conteste votre réponse, vous devez fournir une preuve photographique (avec capture d'écran) indiquant que votre fonction fonctionne correctement pour t=1
, t=5
et t=25
. Vous pouvez également fournir les détails de votre ordinateur pour que les utilisateurs puissent essayer de le répliquer sur leur propre ordinateur.
Votre programme devrait et sera exécuté sur un ordinateur dont la vitesse d'horloge est de 1,6 GHz ou plus.
Gagnant
Le programme le plus court gagne.
Prime
Une prime ira au programme le plus court qui l'arrête sans utiliser de boucle vérifiant le temps écoulé. Si vous êtes en lice pour cette prime, ajoutez une note de bas de page indiquant que votre réponse concerne cette prime.
Classement
/* Configuration */
var QUESTION_ID = 55293; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 30525;
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "http://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "http://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var patt = new RegExp(/[Bb]ounty/);
var res = patt.test(body);
var bountyyn = "no";
if (res) {
bountyyn = "yes";
}
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
bounty: bountyyn
});
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link)
.replace("{{BOUNTY}}", a.bounty);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 400px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
table td {
padding: 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b">
<div id="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td><td>Bounty?</td></tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<div id="language-list">
<h2>Winners by Language</h2>
<table class="language-list">
<thead>
<tr><td>Language</td><td>User</td><td>Score</td></tr>
</thead>
<tbody id="languages">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td>{{BOUNTY}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
<table style="display: none">
<tbody id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
BBC BASIC
exemple sont une référence à la série télévisée Sherlock ou est-ce que je lis trop à ce sujet?Réponses:
x86_64 code machine, 10 octets
Hexdump du code:
Code source (peut être assemblé par
ml64
Visual Studio):Effectue une boucle vide, en partant de la valeur spécifiée jusqu'à 0. J'ai choisi le multiplicateur 945421514 empiriquement par essais et erreurs, jusqu'à ce que mon programme de test produise des résultats satisfaisants.
Programme de test (attend 10 fois pour chacune des durées 1, 5 et 25 secondes):
Le résultat:
J'ai exécuté ce programme sur un ordinateur Windows qui n'a rien d'autre à faire. Si certaines applications sont exécutées, les temps d’attente sont plus irréguliers.
La vitesse du processeur est de 3,9 GHz. Il semble que ce code est à peine suffisant pour la technologie PC actuelle - si la fréquence d'horloge est d'environ 8,8 GHz, le multiplicateur ne s'intégrera pas dans un int signé 32 bits.
PS Comme cette réponse ne vérifie pas combien de temps s'est écoulé, c'est un candidat à la prime.
la source
Bash,
2925242319 octetsTest de précision (
time
) où$1
= 1 seconde:Merci Dennis d'avoir réduit le décompte d'octets à 23 sur 19!
EDIT : J'ai changé l'adresse IP pour éviter
ping
le ping 0.0.0.0 sur Linux, qui est le périphérique de bouclage.Comment ça marche
ping
Le délai d'attente par défaut est de 1 seconde. Par conséquent, lorsque vous contactez une adresse IP qui n'existe pas, la commande ping ne peut pas continuer tant que le délai d'attente n'est pas écoulé ou si une réponse est fournie par l'adresse IP.-t
indiqueping
d'essayer le$1
nombre de fois sur cette fausse adresse IP, ceping
qui oblige à prendre$1
quelques secondes pour terminer le ping.C'est éligible à la prime! Pas de boucle!
la source
w()(ping -t$1 0.0)
(Nous devons avoir différentsping
s; le mien exige-w$1
et obtient une réponse de localhost.)/dev/lo
w 10
, je commence à10.02 sec real
utilisertime
.w()(ping -w$1 1.2)
fonctionne comme un charme.Matlab, 33 octets
Ou vous pouvez aussi l'utiliser dans Octave: essayez-le en ligne
Matlab, 31 octets
Comme suggéré par @flawr , cela peut être fait avec une fonction anonyme (il faut lui donner un nom pour pouvoir l'utiliser):
Exemple:
la source
@(t)eval('tic;while toc<t,end')
eval
pour emballer plusieurs déclarations dans une fonction anonyme. Merci!bsxfun
.t
variable dans eval.Java,
6362 octetsRien d’étonnant, il suffit de saisir le nombre de nanosecondes depuis le 1/1/1970 à plusieurs reprises et de vérifier si une seconde s’est écoulée.
Enregistré 1 octet grâce à Ypnypn et aditsu.
la source
for(long a=System.nanoTime();System.nanoTime()-a<t*1E9;);
t->
?Lot, 27 octets
Une astuce de lot populaire, puisque batch n'avait pas de fonction de veille.
Pas de boucle, donc prime éligible
la source
set/ac=%1+1
enregistre 2 octets.Commodore 64 BASIC, 19
16octetsAvec un appel
N=<number-of-secods>:GOSUB1000
.Cependant, je ne peux pas fournir assez de précision. Parce que C64 avait environ 1 MHz vitesse du processeur, je me souviens qu'il était assez bon pour faire un vide
FOR
-NEXT
boucle 1000 fois de sorte qu'il était sur les 1 seconde.En fait, il existait deux versions principales de la machine: PAL 0,985 MHz et NTSC 1,023 MHz (toutes les données de la page Wikipedia C64 ). Comme j'avais la version NTSC, il était nécessaire d'exécuter la boucle environ 930 fois.
Tests avec le programme suivant (
N
secondes, fournies par l'utilisateur dansINPUT
):où
TI$
est une variable système contenant une chaîne (hhmmss
format) avec le temps écoulé depuis la dernière réinitialisation (précision d'une seconde, mais également en fonction de la vitesse du processeur, ce qui n'est donc pas tout à fait pertinent, car c'est la même horloge).Capture d'écran réalisée avec l'émulateur C64 en ligne http://codeazur.com.br/stuff/fc64_final/ .
Ce programme (ligne
1000
uniquement) occupe1619 octets en mémoire, comme testé avec à laPRINT FRE(0)+65535
fois avant de taper le code (38908 octets) et après (3889338889 octets).PRINT FRE(0)
retourne de la mémoire libre pour le programme BASIC (c'est une valeur négative et une constante65535
doit être ajoutée, mais en réalité cela n'a pas d'importance).Parce que ce programme ne teste pas le temps écoulé dans une boucle, il se qualifie pour une prime.
la source
TI$
précision des variables et qu'il était d'environ 1 seconde par ca. 2 heures de décalage avec l'horloge de référence (en dehors de C64), la précision est suffisante. Ce que je ne suis pas sûr, c’est la valeur950
, cependant, ce serait une autre valeur <1000 (ce dont je suis sûr), c’est toujours la même quantité d’octetsJ
variable devrait en quelque sorte être une partie du code réel, pas une partie du programme de test - donc elle attendrait N secondes, pas seulement 1 seconde. Cependant, je ne sais pas comment l'intégrer à la syntaxe de BASIC.1000 FOR I=1 TO N:FOR I=1 TO 950:NEXT I:NEXTJ:RETURN
à un appel, par exemple.200 N=5:GOSUB 1000
. Aussi, j'ai remarqué que l'OP nécessitait une fonction . Je vais essayer de le réparerGOSUB
-RETURN
déclaration, car il n'y a pas de fonctions dans BASICDEF FN
comme dans BBC BASIC?JavaScript ES6,
504540 octetscela utilise des fonctions auto-exécutables, vous ne savez pas pourquoi
+new Date
ne fonctionne pas.Usage
J'ai testé cela avec Safari Nightly, mais cela fonctionnera également sur Firefox. Testé avec:
Vous pouvez l'exécuter soit en l'entourant de parenthèses:
Ou en le nommant:
Explication
Voici la logique principale du programme:
La version que j'utilise utilise la même logique:
la source
CJam, 15
C'est un bloc qui peut être exécuté ou stocké dans une variable (devenant ainsi une fonction nommée). Dennis et M. Consensus s'accordent pour dire qu'il est acceptable de ne compter que le bloc :)
Explication:
Essayez-le en ligne
la source
JavaScript,
68 54 5142Je pense qu'aucune capture d'écran n'est nécessaire. Mais je suppose que vous pourriez jouer au golf encore plus ...
Nouvelle version: j'ai enfin réussi à éviter
new
et à utiliserDate
deux fois:Versions plus anciennes:
la source
PHP,
1711778479656462 octetsUtilisation:
Appelez la fonction comme suit:
php -d error_reporting=0 -r "require 'script.php'; a(5);echo 'Hello, World!';"
Où 5 est le temps en secondes pendant lequel le programme doit attendre avant de faire écho à "Hello, World!".
Explication:
La fonction obtient d'abord l'heure actuelle en millisecondes. Ensuite, la fonction effectue une boucle jusqu'à ce que l'heure actuelle soit inférieure à la première fois + l'entrée. Après "Hello World!" se fait écho.
Journal:
enregistré 113 octets grâce à Voitcus
enregistré 2 octets grâce à axiac
la source
$get_as_float
paramètre. Supprimez également$t
,$s
- vous n'avez pas besoin de les (voir mon code)echo 1e6;
travaux. Mais oui - prendre le$e=microtime(1)+$i;
Julia,
3320 octetsFonctionne uniquement dans Julia v0.4 en raison de modifications de la signature de fonction de
watch_file
. Définit une fonction anonyme avec un paramètre uniquet
qui (ab) utilise le paramètre timeout dans lawatch_file
fonction.C'est un candidat à la prime!
Démonstration à l'aide du Julia REPL:
Réponse précédente (33 octets), travaillant également dans Julia stable
la source
R, 48 octets
Manifestation:
la source
f=
nombre d'octets, les extraits de fonction conviennent.PHP, 39 octets
(Notez que je peux réellement raccourcir cette étape si un programme complet est requis en tirant parti des arguments passés en ligne de commande. Jusqu'à 35 )
Programme utilisé pour les tests:
Résultats:
Bien que je sois admissible à la prime, je suis à peine en lice avec certaines des autres entrées!
la source
CMD Windows, 22 octets
Ceci n'utilise pas de boucle (label et goto), donc cela donne droit à la prime
Il envoie des
t
pings à 1.0.0.1 (invalide) et attend une réponse pendant 1000 msla source
JavaScript ES6, 40 octets
Testé avec les éléments suivants:
la source
elapsed(STOP, t)
fait? Que sont STOP et écoulés?elapsed
mesure le temps qu'il a fallu au premier argument pour s'exécuter, dans ce casSTOP
, qui n'est à son tour que le premier extrait de code. Le deuxième argument à écoulé est l'argument passé àSTOP
.TI-BASIC (84 + SE), 21 octets
Procédé entrée:
T:prgmT
. C'est l'équivalent le plus proche d'une fonction dans TI-BASIC. Programme:Toute précision est obtenue par essais et erreurs; chronométrer avec un chronomètre fonctionne pour tous les cas de test donnés à un vingtième de seconde.
Informations sur le périphérique:
W00T éligible à une prime!
la source
For(
boucles de votre calculatrice dépend du nombre de variables de lettre existantes? Plus de variables encrassent la TVA et peuvent prendre jusqu'à 20% de votre temps. Les variables système (par exemple , n ,Xmin
) sont immunisés.Python, 57 octets
Fonction d'appel
y()
la source
PureBasic, 92 octets
C'est le plus court auquel je puisse penser. Je pense que ce sera la plus longue ici aussi ...
Tester:
la source
PowerShell, 75 octets
Appels de procédure longs et descriptifs. Yay pour la clarté dans une langue. :)
Appelé dans un programme avec quelque chose comme
Alternativement, si nous sommes autorisés à appeler des programmes externes, nous pouvons descendre à 59 octets avec les éléments suivants:
Ceci sera appelé dans un programme comme suit (en supposant que ce qui précède soit enregistré sous le nom "wait-function.ps1" et enregistré dans le même dossier):
Ce que nous économisons en écrivant la fonction / le programme est cependant plus que saturé par l'excès nécessaire pour l'exécuter réellement. Le soupir.
la source
Python, 66 octets
Notez que mon implémentation n’appelle ni une fonction horaire intégrée, ni une fonction de planification.
Et oui, il est éligible à la prime.
la source
Hassium , 55 octets
Exécuter et voir développé: http://HassiumLang.com/Hassium/index.php?code=9f4e2bdb292b14b150fba63677a11a79
la source
Pyth, 19 octets
Entrée tardive mais après avoir trouvé
.d0
la documentation la nuit dernière, j'ai décidé de tenter le coup.Définit une fonction qui boucle jusqu'à ce que le temps écoulé soit
N
quelques secondes.Essayez ici .
la source
DCNJ+.dZN#Ig.dZJB))
, qui est également 19 octets.RProgN 2 , 13 octets
A expliqué
La prime dit spécifiquement "sans utiliser de boucle pour vérifier combien de temps s'est écoulé ", ce que cela ne fait pas. Cela définit une heure cible et continue de vérifier si elle est passée, elle est donc éligible pour la prime.
Essayez-le en ligne!
la source
Tcl , 53 octets
Essayez-le en ligne!
A expliqué
La commande
clock milliseconds
peut être réduite àclock mil
, avec le premier crochet échappé, elle sera interprétée à chaque boucle et sans une fois. Comme il mesure des millisecondes, nous devons multiplier par 1000 ou 1e3, ce qui économise 1 octet.la source
C # (compilateur interactif Visual C #) + /u:System.Threading, 36 octets
Essayez-le en ligne!
Crée un sémaphore sans capacité et tente de l'obtenir pendant le nombre de secondes spécifié.
Je me rends compte que j'attends quelque chose ici. Pour moi, cela ressemble plus à la solution ping / timeout, par opposition à
Thread.Sleep
. Le code essaie d'obtenir une ressource qu'il ne peut pas obtenir et arrête d'essayer après une limite.===
Vous trouverez ci-dessous une variante qui commence
Task
par une boucle infinie, puis attend qu'elle se termine avec un délai d'attente. Tous les espaces de noms requis sont inclus par défaut, mais la solution a quelques octets de plus que celle ci-dessus.C # (compilateur interactif Visual C #) , 40 octets
Essayez-le en ligne!
la source
05AB1E , 22 octets
Essayez-le en ligne.
REMARQUE: En fonction du nombre de microsecondes de la seconde en cours, la tolérance peut être légèrement supérieure à 0,1 s. Mais étant donné que presque la moitié des réponses ont des problèmes similaires, je me suis dit que c'était permis.
Explication:
05AB1E n'a pas d'intégrité pour l'heure actuelle. Cependant, il possède une structure intégrée pour l'année en cours / mois / jour / heures / minutes / secondes / microsecondes en tant que fonctions intégrées séparées. Étant donné que seules les secondes peuvent potentiellement générer des problèmes de 59 à 0, il me faut à la fois des minutes et des secondes, ce qui rend le code encore plus long que la plupart des réponses dans les langues autres que le codage.
la source
SmileBASIC, 20 octets
Ouvre une boîte de dialogue qui se ferme automatiquement après
T
quelques secondes. Je ne sais pas si cela compte comme une "fonction d’attente intégrée", mais je pense que cela est aussi valable que d’utiliserping
.Un programme alternatif de 37 octets qui ne triche certainement pas:
Fait en sorte que la couleur de fondu de l'écran passe à 0 (alpha = 0, rouge = 0, vert = 0, bleu = 0) (pas d'effet) progressivement sur
T
secondes, puis attend la fin de l'animation.la source