Bayangkan Anda memiliki dua lampu. Lampu ini berkedip dan mati pada tingkat tertentu:
Light 0: Delay 0ms and then blink every 1000ms
Light 1: Delay 500ms and then blink every 1000ms
Mari kita simulasikan lampu ini untuk 2000 ms pertama:
0ms: Light 0 on
500ms: Light 1 on
1000ms: Light 0 off
1500ms: Light 1 off
2000ms: Light 0 on
Tantangan
Diberikan daftar pasangan berurutan yang mewakili waktu untuk lampu, tulislah sebuah program atau fungsi untuk menampilkan urutan ketika mereka berkedip.
Memasukkan
Masukan harus dalam format berikut:
TimeToSimulate
Light0Delay,Light0Period
Light1Delay,Light1Period
...
Dalam format ini, contoh di atas adalah:
2000
0,1000
500,1000
Keluaran
Outputnya harus berupa rangkaian tiga kali lipat yang dipesan:
Time,LightNum,LightStatus
LightStatus adalah nilai kebenaran jika lampu menyala dan nilai palsu jika lampu mati.
Output dari contoh di atas adalah:
0,0,True
500,1,True
1000,0,False
1500,1,False
2000,0,True
Jika dua lampu berkedip pada saat yang sama, lampu dengan angka yang lebih rendah akan tampil pertama di output.
Barang lainnya
- Format input dan output tidak ketat
- Kode seharusnya tidak menghasilkan kesalahan
- Solusinya tidak harus bergantung pada kondisi balapan
- Tidak ada celah standar
- Ini adalah kode-golf , sehingga solusi terpendek menang!
Uji kasus
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
Cuplikan Papan:
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>
Jawaban:
JavaScript,
9897 byteCobalah online
Menyimpan satu byte berkat Shaggy - gunakan sintaks input currying.
sumber
a=>b=>
.Python 2 , 93 byte
Cobalah online!
sumber
Jelly ,
2625 byteTautan diadik yang mengambil daftar
delay, period
daftar-nomor dan nomor kerangka waktu serta mengembalikan daftartime, light, action
bilangan bulat.Lampu 1-diindeks dan
0
mewakili aksi 'mati', sedangkan1
mewakili aksi 'on'.Cobalah online!
Bagaimana?
sumber
Python 2 ,
206214 byteCobalah online!
Kode ini menghasilkan daftar yang tidak berurutan yang berisi waktu peralihan setiap lampu, mengisi waktu tersebut dan pengidentifikasi cahaya, mengurutkan daftar tersebut dan mengeluarkannya.
sumber
input()
akan memungkinkan Anda untuk memotong byte-menghitung mundur juga (tidak ada string parsing akan diperlukan karena Python 2input()
adalaheval(raw_input())
) :).O
mereka akan mengurutkan, yang mungkin juga akan memotong jumlah byte,Perl 5 , 106 + 1 (-n) = 107 byte
Cobalah online!
sumber
Haskell, 121 byte
Cobalah online.
Ini adalah program yang saya mulai:
Dan sebelum bermain golf terakhir saya telah mempersingkatnya menjadi:
sumber
Röda ,
1058785 byteCobalah online!
Penjelasan:
Aliran berisi pada
[1]
nilai titik dalam urutan berikut:Aliran berisi pada
[2]
nilai titik dalam urutan berikut:Aliran berisi pada
[3]
array titik dengan struktur berikut:sumber