Imaginez que vous ayez deux lumières. Ces voyants clignotent et s'éteignent à un rythme spécifique:
Light 0: Delay 0ms and then blink every 1000ms
Light 1: Delay 500ms and then blink every 1000ms
Simulons ces lumières pour les premiers 2000 ms:
0ms: Light 0 on
500ms: Light 1 on
1000ms: Light 0 off
1500ms: Light 1 off
2000ms: Light 0 on
Le défi
Étant donné une liste de paires ordonnées représentant la synchronisation des lumières, écrivez un programme ou une fonction pour sortir la séquence quand elles clignotent.
Contribution
L'entrée doit être au format suivant:
TimeToSimulate
Light0Delay,Light0Period
Light1Delay,Light1Period
...
Dans ce format, l'exemple ci-dessus serait:
2000
0,1000
500,1000
Production
La sortie doit être une série de triplets ordonnés:
Time,LightNum,LightStatus
LightStatus est une valeur vraie si la lumière s'allume et une valeur fausse si la lumière s'éteint.
La sortie de l'exemple ci-dessus serait:
0,0,True
500,1,True
1000,0,False
1500,1,False
2000,0,True
Si deux voyants clignotent en même temps, le voyant avec le numéro le plus bas doit s'afficher en premier dans la sortie.
D'autres choses
- Les formats d'entrée et de sortie ne sont pas stricts
- Le code ne doit produire aucune erreur
- La solution ne doit pas reposer sur les conditions de course
- Aucune échappatoire standard
- C'est le code-golf , donc la solution la plus courte l'emporte!
Cas de test
Input:
2000
0,1000
500,1000
Output:
0,0,True
500,1,True
1000,0,False
1500,1,False
2000,0,True
----
Input:
2
0,1
0,1
Output:
0,0,True
0,1,True
1,0,False
1,1,False
2,0,True
2,1,True
----
Input:
500
100,50
200,100
300,150
Output:
100,0,True
150,0,False
200,0,True
200,1,True
250,0,False
300,0,True
300,1,False
300,2,True
350,0,False
400,0,True
400,1,True
450,0,False
450,2,False
500,0,True
500,1,False
----
Input:
1000
23,345
65,98
912,12
43,365
Output:
23,0,True
43,3,True
65,1,True
163,1,False
261,1,True
359,1,False
368,0,False
408,3,False
457,1,True
555,1,False
653,1,True
713,0,True
751,1,False
773,3,True
849,1,True
912,2,True
924,2,False
936,2,True
947,1,False
948,2,False
960,2,True
972,2,False
984,2,True
996,2,False
Extrait de classement:
var QUESTION_ID=137465,OVERRIDE_USER=41505;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}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></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><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>
Réponses:
JavaScript,
9897 octetsEssayez-le en ligne
Enregistrement d'un octet grâce à Shaggy - utilisez la syntaxe d'entrée au curry.
la source
a=>b=>
.Python 2 , 93 octets
Essayez-le en ligne!
la source
Gelée ,
2625 octetsUn lien dyadique prenant une liste de listes de
delay, period
numéros et un numéro de période et renvoyant une liste d'time, light, action
entiers.Les voyants sont indexés 1 et
0
représentent l'action «éteinte», tandis que1
l'action «allumée».Essayez-le en ligne!
Comment?
la source
Python 2 ,
206214 octetsEssayez-le en ligne!
Ce code génère une liste non ordonnée contenant les heures de commutation de chaque lumière, remplit ces heures et l'identifiant de la lumière, trie ladite liste et la sort.
la source
input()
vous permettra également de réduire le décompte des octets (aucune analyse de chaîne ne sera requise puisque Python 2 l'input()
esteval(raw_input())
) :).O
ils trieront, ce qui réduirait probablement aussi le nombre d'octets,Perl 5 , 106 + 1 (-n) = 107 octets
Essayez-le en ligne!
la source
Haskell, 121 octets
Essayez-le en ligne.
Voici le programme à partir duquel j'ai commencé:
Et avant le golf final, je l'ai raccourci à:
la source
Röda ,
1058785 octetsEssayez-le en ligne!
Explication:
Le flux contient des
[1]
valeurs ponctuelles dans l'ordre suivant:Le flux contient des
[2]
valeurs ponctuelles dans l'ordre suivant:Le flux contient des
[3]
tableaux de points avec la structure suivante:la source