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>
Ответы:
Желе ,
9 87 байт-1 байт благодаря @Dennis (используйте целочисленное деление
:
, а не не меньше чем<¬
)TryItOnline
Как?
источник
Haskell, 35 байт
Эта статья доказывает результат, который значительно упрощает проблему. Опора 1 говорит, что
Понятно, почему оба они необходимы: все суммы остаются кратными gcd, и цель должна помещаться в контейнер. Ключом к результату является алгоритм для получения любого количества целей, которое соответствует этим условиям.
Звоните оператору
%
как[3,6,12]%9
.37-байтовая альтернатива:
источник
05AB1E ,
989 байтИспользует кодировку CP-1252
объяснение
Попробуйте онлайн!
Сохраненный 1 байт, используя уловку «меньше» из ответа MATL Луиса Мендо
источник
MATL , 10 байт
Попробуйте онлайн!
Это использует подход @ xnor .
источник
Excel: 43 байта
=AND(MOD(A10,GCD(A1:A9))=0,A10<=MAX(A1:A9))
Попробуйте онлайн !
Как использовать:
Положите эту формулу в любом месте, кроме A1-A10.
Затем введите объемы Деканта, содержащие объемы в ячейках A1: A9 (поскольку число декантов фиксировано) и цель в A10. клетки без декантов должны быть оставлены пустыми. Куда бы вы ни поместили формулу, результат будет. ИСТИНА, если вы можете достичь цели, ЛОЖЬ, если вы не можете.
источник
JavaScript (ES6), 58 байт
Еще один порт ответа @ xnor. Да, я
reduce
снова использую !источник
e=>n<=e
Сетчатка , 39 байт
Входные данные должны быть разделены запятыми списком графинов, за которым следует точка с запятой, за которой следует целевой том. Например:
Выход
0
(ложно) или1
(правдиво).Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)
объяснение
Это просто преобразует ввод в унарный. После этого мы просто сопоставляем действительные входные данные с одним регулярным выражением:
Часть внутри
(?>...)
находит GCD. Мы делаем это, находя самую большую подстроку,1+
с которой мы можем сопоставить все графины (допуская опционально,
только после полного соответствия GCD). Сама атомарная группа ((?>...)
), так что механизм регулярных выражений не возвращается к делителям GCD, если целевой объем не может быть сопоставлен (в противном случае группа1
будет в некоторой точке уменьшена до совпадения с одним,1
и все входные данные будут достоверными) ,Найдя GCD, мы пытаемся сопоставить целевой объем с кратным простым
(\1+)$
.Наконец, мы проверяем, что целевой объем не превышает емкость самого большого графина, гарантируя, что объем может быть сопоставлен с любым графином
(?<=\3.+)
.источник
Рубин, 35 байт
источник
PARI / GP , 31 байт
Довольно просто. Проверка max (
vecmax
) очень дорогая, мне интересно, можно ли это сделать лучше.источник
Perl, 47 байт
Включает +2 для
-ap
Запустите с размерами банок в первой строке STDIN и целевыми банками во второй строке:
decanter.pl
:Это решение необычно тем, что обрабатывает входные данные построчно и выводит что-то для каждого из них. Вывод для первой строки был тщательно продуман, чтобы быть пустым, в то время как вторая строка печатает решение. Два байта теряется на
()
потому , что<
и>
предназначены для неассоциативных в Perl.Решение регулярных выражений также хорошо, но 49 байтов:
(некоторые детали, украденные из раствора Retina)
Для этого введите STDIN в виде jar-файлов, разделенных пробелами, и цель после
:
:Трудно превзойти языки со встроенным
gcd
(21 байт) иmax
(7 байт) для этого ...источник
Scala,
9053 байтаРаботает в основном так же, как и другие ответы,
но в Scala нет встроенной функции gcd.Scala имеет встроенную функцию gcd, но только для BigInt.источник