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>
Odpowiedzi:
Galaretka ,
9 87 bajtów-1 bajt dzięki @Dennis (użyj dzielenia liczb całkowitych
:
zamiast, nie mniej niż,<¬
)TryItOnline
W jaki sposób?
źródło
Haskell, 35 bajtów
Ten artykuł dowodzi wyniku, który znacznie upraszcza problem. Prop 1 tak mówi
Jest jasne, dlaczego oba są konieczne: wszystkie kwoty pozostają wielokrotnościami gcd, a cel musi zmieścić się w pojemniku. Kluczem do wyniku jest algorytm do wygenerowania dowolnej ilości celu, która spełnia te warunki.
Zadzwoń do operatora
%
jak[3,6,12]%9
.37-bajtowa alternatywa:
źródło
05AB1E ,
989 bajtówWykorzystuje kodowanie CP-1252
Wyjaśnienie
Wypróbuj online!
Zapisano 1 bajt, wykorzystując mniej niż sztuczkę z odpowiedzi MATL Luisa Mendo
źródło
MATL , 10 bajtów
Wypróbuj online!
Wykorzystuje podejście @ xnor .
źródło
Excel: 43 bajty
=AND(MOD(A10,GCD(A1:A9))=0,A10<=MAX(A1:A9))
Wypróbuj online !
Sposób użycia:
Umieść tę formułę w dowolnym miejscu z wyjątkiem A1-A10.
Następnie wprowadź swoje objętości przechowywania dekantu w komórkach A1: A9 (ponieważ liczba dekantów jest stała) i cel w A10. komórki bez dekantu należy pozostawić puste. Gdziekolwiek umieścisz, formuła będzie zawierać wynik. PRAWDA, jeśli możesz osiągnąć cel, FALSE, jeśli nie możesz.
źródło
JavaScript (ES6), 58 bajtów
Kolejny port odpowiedzi @ xnor. Tak,
reduce
znów skorzystam !źródło
e=>n<=e
to wizualny palindrom;)Siatkówka , 39 bajtów
Dane wejściowe powinny być oddzieloną przecinkami listą dekanterów, po której należy wstawić średnik, a następnie wolumin docelowy. Na przykład:
Dane wyjściowe to
0
(fałsz) lub1
(prawda).Wypróbuj online!(Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Wyjaśnienie
To po prostu przekształca dane wejściowe w jednoargumentowe. Następnie po prostu dopasowujemy prawidłowe dane wejściowe za pomocą jednego wyrażenia regularnego:
Część wewnątrz
(?>...)
znajduje GCD. Robimy to, znajdując największy podciąg,1+
z którym możemy dopasować wszystkie dekantery (pozwalając opcjonalnie,
dopiero po pełnym dopasowaniu GCD). Grupa atomowa ((?>...)
sama), aby silnik regex nie cofał się do dzielników GCD, jeśli docelowej objętości nie można dopasować (w przeciwnym razie grupa1
zostanie w pewnym momencie zredukowana do dopasowania jednego,1
a wszystkie dane wejściowe będą zgodne z prawdą) .Po znalezieniu GCD staramy się dopasować docelową głośność jako wielokrotność za pomocą prostego
(\1+)$
.Na koniec sprawdzamy, czy objętość docelowa nie jest większa niż pojemność największego dekantera, upewniając się, że objętość można dopasować do każdego dekantera
(?<=\3.+)
.źródło
Rubin, 35 bajtów
źródło
PARI / GP , 31 bajtów
Prawie proste. Sprawdzanie max (
vecmax
) jest bardzo kosztowne, zastanawiam się, czy można to zrobić lepiej.źródło
Perl, 47 bajtów
Obejmuje +2 za
-ap
Uruchom z rozmiarami słoików w pierwszej linii STDIN i słojem docelowym w drugiej linii:
decanter.pl
:To rozwiązanie jest niezwykłe, ponieważ przetwarza dane wejściowe linia po linii i wyświetla coś dla każdego z nich. Dane wyjściowe dla pierwszego wiersza zostały starannie zaprojektowane, aby były puste, podczas gdy drugi wiersz drukuje rozwiązanie. Dwa bajty zostaną utracone
()
bo<
i>
są przeznaczone do non-asocjacyjne w Perlu.Rozwiązanie wyrażenia regularnego jest również ładne, ale 49 bajtów:
(niektóre części skradzione z rozwiązania Retina)
W tym celu podaj dane wejściowe STDIN jako słoiki oddzielone spacjami i celuj po
:
:Trudne do pokonania języki z wbudowanym
gcd
(21 bajtów) imax
(7 bajtów) dla tego ...źródło
Scala,
9053 bajtówDziała zasadniczo tak samo jak inne odpowiedzi,
ale scala nie ma wbudowanej funkcji gcd.Scala ma wbudowaną funkcję gcd, ale tylko dla BigInt.źródło