Du hast eine Tüte Kegel bekommen. Jeder weiß, dass man zwischen den Geschmacksrichtungen wechseln muss, um die verschiedenen Geschmacksrichtungen am meisten zu schätzen.
Grundlagen:
- Sie können jeweils nur 1 Kegel essen
- Die Reihenfolge, in der Sie Ihre Kegel essen, muss regelmäßig sein.
- Jede Periode kann einen bestimmten Geschmack nur einmal enthalten.
- Ihre Tasche hat nur so viele Kegel. Sie können nicht mehr von einem bestimmten Geschmack von Kegel essen, als in Ihrer Tasche erscheint.
- Sie möchten so viele Kegel wie möglich essen (es ist möglicherweise nicht immer möglich)
Beispiele:
Nehmen wir an, Sie beginnen mit 3 roten, 2 blauen und 3 grünen Kegeln:
R B G R B G R G Invalid: The last R must be followed by a B, not a G
R B G R B G R Valid, but sub-optimal
R R R Valid, but sub-optimal
R G B R G B R G Valid and optimal
G R B G R B G R Also valid and optimal (there are multiple good solutions)
Input-Output
- Ihnen wird eine nicht leere Liste positiver Ganzzahlen für die Farbanzahl übergeben. (Das obige Beispiel wäre
[3,2,3]
). - Sie müssen eine Liste mit einer gültigen und optimalen Bestellung zurücksenden.
- Anstatt Farben zu verwenden, verwenden Sie die Indizes aus der Eingabeliste. (Das letzte Beispiel oben wäre
[2,0,1,2,0,1,2,0]
). - Ihre Ausgabe kann 0-indiziert oder 1-indiziert sein. Meine Beispiele werden mit 0 indiziert
Testfälle
1 0
4 0 0 0 0
4 1 0 0 0 0
3 1 0 1 0 or 0 0 0
5 2 2 0 1 2 0 1 2 0
2 3 5 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2
2 4 5 2 1 2 1 2 1 2 1 2
3 4 5 2 1 0 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2 0 1 2
1 1 1 1 1 6 5 0 1 2 3 4 5 (lots of other solutions)
1 1 1 1 1 8 5 5 5 5 5 5 5 5
2 4 6 8 3 2 1 3 2 1 3 2 1 3 2 1 3 2
Dies ist ein Code-Golf , also machen Sie Ihre Lösungen so kurz wie möglich in Ihrer Lieblingssprache!
Antworten:
JavaScript (ES6),
177 bis175 ByteFormatiert und kommentiert
Verwendete Formel
Unten finden Sie eine Tabelle, in der die Funktionsweise der Formel
F(i, j) = minimum(value[j], value[i] + 1)
, hier miti = 0
und die Eingabe dargestellt sind[ 5, 2, 2 ]
.Diese Formel kann wie folgt interpretiert werden: Für jeden Kegel-Typ können wir nicht mehr als die Anzahl der am wenigsten verfügbaren Typen plus eins auswählen.
Testfälle
Code-Snippet anzeigen
quelle
m
das Ende der "Loops" golfinduziert oder ist es einfach so, wie JS ist?m=0
hier ist jedoch golfbedingt, da mir der Anfangswert dieser Schleife egal ist (er wird sowieso überschrieben). Dort zu initialisierenm
ist praktisch.[1,2,3].reduce((x, y) => x+y, 10)
in JS wärereduce(lambda x,y: x+y, [1,2,3], 10)
in Python (ich denke), beide resultieren in16
.Jelly , 22 Bytes
1-basierte Indizierung.
Probieren Sie es online!
Wie?
Wiederholt jedes Präfix der Indizes, sortiert nach absteigendem Wert, um ein weiteres Mal, als dies mit der angegebenen Kegeltüte möglich wäre. Entfernt dann das oder die endgültigen Kegeln aus jedem dieser Indizes, um sie erreichbar zu machen, und gibt denjenigen mit den meisten Kegeln zurück .
Die Zahl, die aus einer zusätzlichen periodischen Wiederholung entfernt werden sollte, ist nur die Zahl mit der Mindestanzahl für dieses Präfix.
quelle
Python3,
174172167 BytesIdee
Bei zB 3 roten, 2 blauen und 3 grünen Kegeln kann man sie in einem Raster anordnen, sortiert nach Farbe und Menge:
Wenn man versucht, genau i Kegel zu essen, kann man mindestens i * c Kegel insgesamt essen, wobei c die Anzahl der Kegel in der r-ten Spalte ist, z. B. für i = 2 kann man mindestens 6 Kegel essen.
Sie müssen nur noch zählen, wie viele zusätzliche Kegel in einem unvollständigen Zeitraum gegessen werden können.
Golf gespielt
Kommentiert
Probieren Sie es online!
Bearbeiten: Ersetzt
(i+1)
durch-~i
, um 2 Bytes zu sparen.Edit: -5 Bytes dank Dead Possum
quelle
sum(1for e in b if e[0]>c)
zusum(c<e[0]for e in b)
. Es würde True implizit in 1 konvertieren und Sie 5 Bytes sparen