Bei N Dekantern (0 < N <10), die C 0 ... C N-1 Liter (0 < C <50) und ein Ziel G Liter enthalten können, stellen Sie bitte fest, ob es möglich ist, dieses Ziel nur mit der zu erreichen folgende Aktionen:
- Füllen Sie eine Karaffe
- Eine Karaffe leeren
- Von einer Karaffe in eine andere füllen, bis die, in die gegossen wird, voll ist oder die, aus der gegossen wird, leer ist
Die Zielmenge G muss die Wassermenge in einem der Behälter am Ende sein. Sie können keinen Ausgangsdekanter haben.
Beispiele
N : 2
C 0 : 5
C 1 : 12
G : 1
Ergebnis: Ja
N : 3
C 0 : 6
C 1 : 9
C 2 : 21
G : 5
Ergebnis: Nr
Hinweis: Um zu berechnen, ob es möglich ist, überprüfen Sie, ob G durch die GCD der Kapazitäten teilbar ist. Stellen Sie außerdem sicher, dass es in einen Behälter passt.
Denken Sie daran, dass dies Codegolf ist , sodass der Code mit der niedrigsten Anzahl von Bytes gewinnt.
Bestenlisten
Hier ist ein Stapel Snippet sowohl eine regelmäßige Rangliste und einen Überblick über die Gewinner von Sprache zu erzeugen.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Leaderboard-Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Antworten:
Jelly ,
9 87 Bytes-1 Byte dank @Dennis (verwenden Sie die Ganzzahldivision
:
, anstatt nicht weniger als,<¬
)TryItOnline
Wie?
quelle
Haskell, 35 Bytes
Dieses Papier beweist ein Ergebnis, das das Problem erheblich vereinfacht. Prop 1 sagt das
Es ist klar, warum beides notwendig ist: Alle Beträge bleiben Vielfache des gcd, und das Ziel muss in einen Container passen. Der Schlüssel des Ergebnisses ist ein Algorithmus, um jeden Zielbetrag zu erzeugen, der diesen Bedingungen entspricht.
Rufen Sie den Operator
%
gerne an[3,6,12]%9
.Eine 37-Byte-Alternative:
quelle
05AB1E ,
989 BytesVerwendet die CP-1252- Codierung
Erläuterung
Probieren Sie es online!
1 Byte mit dem weniger als Trick aus Luis Mendos MATL-Antwort gespeichert
quelle
MATL , 10 Bytes
Probieren Sie es online!
Hierbei wird der @ xnor-Ansatz verwendet .
quelle
Excel: 43 Bytes
=AND(MOD(A10,GCD(A1:A9))=0,A10<=MAX(A1:A9))
Probieren Sie es online !
So verwenden Sie:
Setzen Sie diese Formel überall außer A1-A10.
Geben Sie dann Ihr Dekantierungsvolumen in die Zellen A1: A9 (da die Anzahl der Dekantierungen festgelegt ist) und das Ziel in A10 ein. Zellen ohne Dekanter sollten leer bleiben. Wo auch immer Sie die Formel einfügen, sie enthält das Ergebnis. WAHR, wenn Sie das Ziel erreichen können, FALSCH, wenn Sie nicht können.
quelle
JavaScript (ES6), 58 Byte
Ein weiterer Port von @ xnors Antwort. Ja, ich kann es wieder benutzen
reduce
!quelle
e=>n<=e
ist ein visuelles Palindrom;)Netzhaut , 39 Bytes
Die Eingabe sollte eine durch Kommas getrennte Liste der Dekanter sein, gefolgt von einem Semikolon und dem Zielvolumen. Z.B:
Die Ausgabe ist
0
(falsch) oder1
(wahr).Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Erläuterung
Dadurch wird die Eingabe nur in unär umgewandelt. Danach ordnen wir einfach gültige Eingaben einem einzigen regulären Ausdruck zu:
Der innere Teil
(?>...)
findet den GCD. Wir finden dazu den größten Teilstring,1+
mit dem wir alle Dekanter abgleichen können (optional,
nur nach einer vollständigen Übereinstimmung der GCD). Die Atomgruppe ((?>...)
n) selbst, damit die Regex-Engine nicht zu Teilern der GCD zurückkehrt, wenn das Zielvolumen nicht erreicht werden kann (andernfalls wird die Gruppe1
irgendwann auf die Übereinstimmung mit einer einzelnen reduziert1
und alle Eingaben sind wahr). .Sobald wir den GCD gefunden haben, versuchen wir, das Zielvolumen als Vielfaches mit einem einfachen Wert abzugleichen
(\1+)$
.Schließlich überprüfen wir, ob das Zielvolumen nicht größer als die Kapazität des größten Dekanters ist, indem wir sicherstellen, dass das Volumen in jedem Dekanter mit diesem übereinstimmt
(?<=\3.+)
.quelle
Ruby, 35 Bytes
quelle
PARI / GP , 31 Bytes
Ziemlich unkompliziert. Das Überprüfen von max (
vecmax
) ist sehr kostspielig und ich frage mich, ob es besser geht.quelle
Perl, 47 Bytes
Beinhaltet +2 für
-ap
Laufen Sie mit den Glasgrößen in der ersten Zeile von STDIN und dem Zielglas in der zweiten Zeile:
decanter.pl
:Diese Lösung ist insofern ungewöhnlich, als sie die Eingabe zeilenweise verarbeitet und für jede Zeile etwas ausgibt. Die Ausgabe für die erste Zeile wurde sorgfältig so gestaltet, dass sie leer ist, während die zweite Zeile die Lösung druckt. Zwei Bytes verloren auf ,
()
weil<
und>
sind so konzipiert, dass nicht-assoziativ in Perl.Die Regex-Lösung ist auch schön, aber 49 Bytes:
(einige Teile aus der Retina-Lösung gestohlen)
Geben Sie dazu STDIN als Jars ein, die durch Leerzeichen und Ziel nach a getrennt sind
:
:Schwer zu übertreffende Sprachen mit einem eingebauten
gcd
(21 Bytes) undmax
(7 Bytes) für dieses ...quelle
Scala,
9053 BytesFunktioniert im Prinzip genauso wie die anderen Antworten,
aber scala hat keine eingebaute gcd-Funktion.Scala hat eine eingebaute gcd-Funktion, aber nur für BigInt.quelle