Hintergrund
Die offizielle Währung der imaginären Nation Golfenistan ist das Foo , und es sind nur drei Arten von Münzen im Umlauf: 3 Foos, 7 Foos und 8 Foos. Man kann sehen, dass es nicht möglich ist, mit diesen Münzen bestimmte Beträge wie 4 Foos zu bezahlen. Trotzdem können alle ausreichend großen Mengen gebildet werden. Ihre Aufgabe ist es, den größten Betrag zu finden, der mit den Münzen nicht gebildet werden kann (in diesem Fall 5 Foos), der als Münzenproblem bekannt ist .
Eingang
Ihre Eingabe ist eine Liste positiver Ganzzahlen, die die Werte der im Umlauf befindlichen Münzen darstellen. Zwei Dinge sind dabei garantiert:L = [n1, n2, ..., nk]
- Die GCD der Elemente von
L
ist 1. L
enthält nicht die Nummer 1.
Es kann unsortiert sein und / oder Duplikate enthalten (denken Sie an Münzen in Sonderausgabe).
Ausgabe
Da der GCD von L
1 ist, kann jede ausreichend große ganze Zahl m
als eine nicht negative lineare Kombination ihrer Elemente ausgedrückt werden; Mit anderen Worten, wir haben
m = a1*n1 + a2*n2 + ... + ak*nk
für einige ganze Zahlen . Ihre Ausgabe ist die größte Ganzzahl, die in dieser Form nicht ausgedrückt werden kann . Als Hinweis ist bekannt, dass die Ausgabe immer kleiner ist als , wenn und sind die maximalen und minimalen Elemente von ( Referenz ).ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
Regeln
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig. Wenn in Ihrer Sprache hierfür eine Funktion integriert ist, können Sie diese möglicherweise nicht verwenden. Es gibt keine Anforderungen an die Zeit- oder Speichereffizienz, außer dass Sie in der Lage sein sollten, die Testfälle zu bewerten, bevor Sie Ihre Antwort veröffentlichen.
Nachdem ich diese Challenge gepostet hatte, wies Benutzer @vihan darauf hin, dass Stack Overflow ein genaues Duplikat hat . Basierend auf dieser Metadiskussion wird diese Herausforderung nicht als Duplikat gelöscht. Ich bitte jedoch darum, dass in allen Antworten, die auf den Antworten der SO-Version basieren, die Originale zitiert, der Community-Wiki-Status zugewiesen und diese gelöscht werden, wenn der ursprüngliche Autor ihre Antwort hier veröffentlichen möchte.
Testfälle
[3, 7, 8] -> 5
[25, 10, 16] -> 79
[11, 12, 13, 14, 13, 14] -> 43
[101, 10] -> 899
[101, 10, 899] -> 889
[101, 10, 11] -> 89
[30, 105, 70, 42] -> 383
[2, 51, 6] -> 49
quelle
FrobeniusNumber
in Mathematica.(p - 1)(q - 1)
als Obergrenze festlegt , wop
und woq
das kleinste und größte Element der Menge ist.[2,3]
in angemessener Zeit und sonst nichts tun kann .[2,5]
würde etwa eine Million Python-Listen im Speicher erstellen.Antworten:
Pyth, 23 Bytes
Es ist sehr langsam, da es alle Werte bis zum Produkt aller Münzen überprüft. Hier ist eine Version, die fast identisch ist, aber 1) die Menge der Münzen auf diejenigen reduziert, die nicht durch einander teilbar sind und 2) nur Werte bis zu
(max(coins) - 1) * (min(coins) - 1)
(47 Byte) prüft :Erläuterung
quelle
Perl,
605451 Bytes50 Byte Code + 1 Byte Befehlszeile
Ich werde weiter Golf spielen und später eine Erklärung abgeben. Der grundlegende Ansatz besteht darin, die Regex-Engine die harte Arbeit mit dem String-Matching erledigen zu lassen. Beispielsweise wird ein regulärer Ausdruck erstellt, der
^(.{3})*(.{7})*(.{8})*$
einer Zeichenfolge ähnelt und mit dieser übereinstimmt,n
wobei ern
vom Produkt der Eingaben abweicht, bis er nicht mehr übereinstimmt.Beachten Sie, dass dies mit zunehmender Anzahl der Argumente exponentiell langsam wird.
Verwendung: Argumente werden aus STDIN eingelesen (durch neue Zeile getrennt), zum Beispiel:
quelle
R ,
8478 BytesProbieren Sie es online!
outer
colSums
Eine schnellere, aber längere (um zwei Bytes) Version berücksichtigt nur
max(a)
:Eine etwas kürzere Version (78 Byte), die meistens zu viel Protokoll oder Speicherplatz benötigt, um online ausgeführt zu werden, ist Try it online
quelle
Python2,
188187 BytesDer zweite Einzug wird als 4 Leerzeichen auf SO gerendert, dies sollten Tabulatoren sein.
Eigentlich eine ‚schnelle‘ Lösung, nicht Brute - Force, Verwendungen ‚Wilfs Methode‘ , wie hier .
quelle
Javascript ES6,
120130126128127125 ZeichenAlternative 126-Zeichen-Version:
Prüfung:
quelle
forEach(
mitmap(