var QUESTION_ID=94202,OVERRIDE_USER=12537;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:
Jelly ,
9 87 byte-1 byte terima kasih kepada @Dennis (gunakan divisi integer
:
,, bukannya tidak kurang,<¬
)TryItOnline
Bagaimana?
sumber
Haskell, 35 byte
Makalah ini membuktikan hasil yang sangat menyederhanakan masalah. Prop 1 mengatakan itu
Jelas mengapa kedua hal ini diperlukan: semua jumlah tetap kelipatan gcd, dan tujuannya harus sesuai dengan sebuah wadah. Kunci dari hasil adalah algoritma untuk menghasilkan jumlah gol yang sesuai dengan kondisi ini.
Sebut
%
seperti operator[3,6,12]%9
.Alternatif 37 byte:
sumber
05AB1E ,
989 byteMenggunakan pengkodean CP-1252
Penjelasan
Cobalah online!
Disimpan 1 byte menggunakan trik yang kurang dari jawaban MATL dari Luis Mendo
sumber
MATL , 10 byte
Cobalah online!
Ini menggunakan pendekatan @ xnor .
sumber
Excel: 43 byte
=AND(MOD(A10,GCD(A1:A9))=0,A10<=MAX(A1:A9))
Cobalah online !
Cara menggunakan:
Letakkan formula ini di mana saja kecuali A1-A10.
Kemudian masukkan volume memegang Decant Anda di sel A1: A9 (karena jumlah decant diperbaiki) dan tujuannya di A10. sel tanpa decant harus dibiarkan kosong. Di mana pun Anda meletakkan formula akan berisi hasilnya. BENAR jika Anda dapat mencapai tujuan, SALAH jika Anda tidak bisa.
sumber
JavaScript (ES6), 58 byte
Port lain dari jawaban xnor. Ya, saya bisa menggunakannya
reduce
lagi!sumber
e=>n<=e
Retina , 39 byte
Input harus berupa daftar decanters yang dipisahkan koma, diikuti oleh tanda titik koma, diikuti oleh volume target. Misalnya:
Outputnya adalah
0
(falsy) atau1
(truthy).Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Penjelasan
Ini hanya mengubah input ke unary. Setelah itu kami cukup mencocokkan input yang valid dengan satu regex:
Bagian dalam
(?>...)
menemukan GCD. Kami melakukan ini dengan menemukan substring terbesar1+
yang kami dapat mencocokkan semua decanters (memungkinkan opsional,
hanya setelah kecocokan penuh GCD). Kelompok atom (the(?>...)
) itu sendiri sehingga mesin regex tidak mundur ke pembagi GCD jika volume target tidak dapat dicocokkan (jika tidak, suatu kelompok1
akan dikurangi untuk mencocokkan satu1
dan semua input akan jujur) .Setelah kami menemukan GCD, kami mencoba mencocokkan volume target sebagai kelipatannya dengan yang sederhana
(\1+)$
.Akhirnya, kami memeriksa bahwa volume target tidak lebih besar dari kapasitas decanter terbesar, dengan memastikan bahwa volume dapat dicocokkan dengan decanter manapun
(?<=\3.+)
.sumber
Ruby, 35 byte
sumber
PARI / GP , 31 byte
Cukup mudah. Memeriksa maks (
vecmax
) sangat mahal, saya ingin tahu apakah itu bisa dilakukan dengan lebih baik.sumber
Perl, 47 byte
Termasuk +2 untuk
-ap
Jalankan dengan ukuran tabung pada baris pertama STDIN dan tabung target pada baris kedua:
decanter.pl
:Solusi ini tidak biasa karena memproses input baris demi baris dan mengeluarkan sesuatu untuk masing-masingnya. Output untuk baris pertama dirancang dengan hati-hati agar kosong sementara baris kedua mencetak solusinya. Dua byte hilang
()
karena<
dan>
dirancang untuk non-asosiatif dalam perl.Solusi regex juga bagus tetapi 49 byte:
(beberapa bagian dicuri dari solusi Retina)
Untuk yang ini, berikan input pada STDIN sebagai guci yang dipisahkan oleh spasi dan target setelah
:
:Sulit dikalahkan bahasa dengan builtin
gcd
(21 byte) danmax
(7 byte) untuk yang satu ini ...sumber
Scala,
9053 byteBekerja pada dasarnya sama dengan jawaban lainnya,
tetapi scala tidak memiliki fungsi gcd bawaan.Scala memiliki fungsi built.in gcd, tetapi hanya untuk BigInt.sumber