Beim Gewichtheben möchte ich ein bestimmtes Gewicht erreichen, indem ich mehrere Platten an einer Stange befestige.
Ich habe folgende Platten:
- 6 Teller à 1 kg
- 6 Teller à 2,5 kg
- 6 Teller à 5 kg
- 6 Teller à 10 kg
Die Stange selbst wiegt 10 kg.
Die Platten dürfen nur paarweise angebracht werden - sie sind an jedem Ende der Stange angebracht, und die Anordnung an den beiden Enden muss vollständig symmetrisch sein (z. B. Anbringen von zwei 5-kg-Platten an einem Ende und einer 10-kg-Platte an das andere Ende ist aus Sicherheitsgründen verboten).
Erstellen Sie ein Programm oder eine Funktion, die mir sagt, wie viele Platten jeder Art ich verwenden muss, um ein bestimmtes Gesamtgewicht zu erhalten. Die Eingabe ist eine Ganzzahl größer als 11; Die Ausgabe ist eine Liste / ein Array / eine Zeichenfolge mit 4 Zahlen. Wenn es unmöglich ist, vorhandene Platten zu kombinieren, um das Zielgewicht zu erhalten, geben Sie ein Null / Leer-Array, eine ungültige Zeichenfolge aus, lösen Sie eine Ausnahme oder ähnliches aus.
Wenn es mehrere Lösungen gibt, darf der Code nur eine ausgeben (lassen Sie den Benutzer nicht wählen - er ist zu beschäftigt mit anderen Dingen).
Testfälle:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
Wenn Ihr Code die Zahlen in umgekehrter Reihenfolge ausgibt (von der schweren bis zur leichten Platte), geben Sie dies bitte explizit an, um Verwechslungen zu vermeiden.
quelle
Antworten:
Gelee , 22 Bytes
Probieren Sie es online aus! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
MATL ,
2928 BytesFür Eingaben, die keine Lösung haben, wird eine leere Ausgabe erzeugt (ohne Fehler).
Probieren Sie es online aus!
Erläuterung
quelle
Mathematica, 70 Bytes
Anonyme Funktion. Nimmt eine Zahl als Eingabe und gibt entweder eine Liste oder Fehler aus und gibt zurück,
{}[[1]]
wenn es keine Lösung gibt.quelle
Gelee, 25 Bytes
Probieren Sie es hier aus.
quelle
2,5,10,20
->2,5,⁵,20
,
Dyade? Mein ganzes Leben ist eine Lüge,
ist eine Dyade, kann aber auch für Literale verwendet werden.2,5,⁵,20
ist nicht eine wörtliche obwohl (2,5
und20
sind, aber,
,⁵
und,
sind Atome), so dass Sie etwas zu kombinieren , die Links bräuchten.Python 3, 112 Bytes
Eine anonyme Funktion, die über ein Argument die Zielmasse eingibt und die Nummer jeder Platte als Liste zurückgibt. Wenn keine Lösung vorhanden ist, wird ein Fehler ausgegeben. Das ist reine rohe Gewalt.
Wie es funktioniert
Probieren Sie es auf Ideone
quelle
Brachylog , 50 Bytes
Rückgabe,
false
wenn nicht möglich.quelle
Pyth,
343125 BytesTestsuite.
Fehler in der Unmöglichkeit.
Dies ist im Wesentlichen eine Brute-Force.
Dies ist ziemlich schnell, da es nur 256 mögliche Anordnungen gibt.
quelle
Scala, 202 Bytes
Beschlossen, dass Scala hier nicht viel Liebe findet, deshalb präsentiere ich eine (wahrscheinlich nicht optimale) Lösung in Scala.
Das Programm wird in umgekehrter Reihenfolge und mit zusätzlichem Müll ausgegeben, verglichen mit Lösungen in der Post. Wenn keine Lösung gefunden wird, wird 0 gedruckt.
Hinweis: Ich konnte keine Zeilenumbrüche oder Leerzeichen entfernen, da Scala dumm ist. Um die Größe zu verringern, muss die Methode überarbeitet werden, es sei denn, ich habe etwas Offensichtliches übersehen.
quelle
APL, 40 Bytes
In ⎕IO ← 0. Auf Englisch:
10+2×,∘.+⌿1 2.5 5 10∘.×⍳4
: Erstellen Sie das Array aller möglichen Gewichte, indem Sie die äußere 4D-Summe der Gewichte pro Gewichtstyp berechnen.⍵⍳⍨
: Suche den Index der angegebenen. Wenn nicht gefunden, ist der Index 1 + die Anzahl des Arrays in Schritt 1;(4⍴4)⊤
: den Index in Basis 4 darstellen, dh die Koordinate des angegebenen Gewichts im 4D-Raum berechnen;2×
: Bringen Sie das Ergebnis in den Problemraum, wo die Koordinaten als die Hälfte der Anzahl der Platten interpretiert werden sollten.Beispiel: {2 × (4⍴4) ⊤⍵⍳⍨10 + 2 ×, ⊃∘. + / ↓ 1 2,5 5 10∘. × ⍳4} 112 2 4 6 6
Bonus : Da APL eine Array-Sprache ist, können mehrere Gewichte gleichzeitig getestet werden. In diesem Fall wird das Ergebnis transponiert:
quelle
JavaScript (ES6), 109 Byte
Gibt
00-2
bei Fehler zurück. Alternative Lösung, dieundefined
bei Fehler zurückgibt , auch 109 Bytes:quelle