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>
Respuestas:
Gelatina ,
9 87 bytes-1 byte gracias a @Dennis (use división entera
:
, en lugar de no menos que,<¬
)TryItOnline
¿Cómo?
fuente
Haskell, 35 bytes
Este papel demuestra un resultado que simplifica enormemente el problema. La Proposición 1 dice que
Está claro por qué ambos son necesarios: todas las cantidades siguen siendo múltiplos del mcd, y la meta debe caber en un contenedor. La clave del resultado es un algoritmo para producir cualquier cantidad objetivo que se ajuste a estas condiciones.
Llame al operador
%
como[3,6,12]%9
.Una alternativa de 37 bytes:
fuente
05AB1E ,
989 bytesUtiliza la codificación CP-1252
Explicación
Pruébalo en línea!
Se guardó 1 byte utilizando el truco de la respuesta MATL de Luis Mendo
fuente
MATL , 10 bytes
Pruébalo en línea!
Esto utiliza el enfoque de @ xnor .
fuente
Excel: 43 bytes
=AND(MOD(A10,GCD(A1:A9))=0,A10<=MAX(A1:A9))
Pruébalo en línea !
Cómo usar:
coloque esta fórmula en cualquier lugar, excepto A1-A10.
Luego ingrese sus volúmenes de Decant holding en las celdas A1: A9 (porque el número de decants es fijo) y el objetivo en A10. las celdas sin decantadores deben dejarse en blanco. Donde sea que coloque la fórmula contendrá el resultado. VERDADERO si puedes lograr el objetivo, FALSO si no puedes.
fuente
JavaScript (ES6), 58 bytes
Otro puerto de la respuesta de @ xnor. Sí, puedo volver a usar
reduce
!fuente
e=>n<=e
Retina , 39 bytes
La entrada debe ser una lista separada por comas de los decantadores, seguida de un punto y coma, seguido del volumen de destino. P.ej:
El resultado es
0
(falso) o1
(verdadero).Pruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
Explicación
Esto solo convierte la entrada a unario. Luego simplemente hacemos coincidir las entradas válidas con una única expresión regular:
La parte interior
(?>...)
encuentra el MCD. Hacemos esto al encontrar la subcadena más grande1+
con la que podamos unir todos los decantadores (permitiendo un opcional,
solo después de una coincidencia completa del GCD). El grupo atómico (el(?>...)
) en sí mismo para que el motor regex no retroceda a los divisores del GCD si el volumen objetivo no se puede igualar (de lo contrario, el grupo se1
reducirá en algún momento para que coincida con uno solo1
y todas las entradas serán verdaderas) .Una vez que hemos encontrado el GCD, tratamos de hacer coincidir el volumen objetivo como un múltiplo con un simple
(\1+)$
.Finalmente, verificamos que el volumen objetivo no sea mayor que la capacidad de la jarra más grande, al asegurarnos de que el volumen pueda coincidir dentro de cualquier jarra con
(?<=\3.+)
.fuente
Ruby, 35 bytes
fuente
PARI / GP , 31 bytes
Bastante sencillo. Verificar el max (
vecmax
) es muy costoso, me pregunto si se puede hacer mejor.fuente
Perl, 47 bytes
Incluye +2 para
-ap
Ejecute con los tamaños de jarra en la primera línea de STDIN y el jarra de destino en la segunda línea:
decanter.pl
:Esta solución es inusual ya que procesa la entrada línea por línea y genera algo para cada una de ellas. El resultado de la primera línea fue cuidadosamente diseñado para estar vacío, mientras que la segunda línea imprime la solución. Dos bytes se pierden en la
()
causa<
y>
están diseñados para ser no asociativo en Perl.La solución regex también es buena pero 49 bytes:
(algunas partes robadas de la solución Retina)
Para esto, ingrese STDIN como frascos separados por espacios y destino después de un
:
:Idiomas difíciles de superar con un incorporado
gcd
(21 bytes) ymax
(7 bytes) para este ...fuente
Scala,
9053 bytesFunciona básicamente igual que las otras respuestas,
pero scala no tiene una función incorporada de gcd.Scala tiene una función incorporada en gcd, pero solo para BigInt.fuente