Erstes Puzzle von mir, Verbesserungsvorschläge gerne erhalten!
Das Szenario ist; Sie arbeiten als Manager für eine Wildwasser-Rafting-Firma. Jeden Morgen erhalten Sie eine Liste mit Buchungen, die Sie in Floßladungen sortieren müssen. Schreiben Sie ein Programm oder eine Funktion in der von Ihnen gewählten Sprache, die dies für Sie erledigt.
Jedes Floß hat ein Maximum an n
Kunden und jede Buchung ist für eine Gruppe von 1 bisn
einschließlich Personen. Die folgenden Regeln müssen beachtet werden;
Es dürfen keine Gruppen aufgeteilt werden. Wenn sie zusammen gebucht haben, müssen sie sich alle im selben Floß befinden.
Die Anzahl der Flöße muss minimiert werden.
Vorbehaltlich der beiden vorhergehenden Regeln müssen die Gruppen so gleichmäßig wie möglich auf die Flöße verteilt werden.
Eingänge.
Die Nummern
(Sie können davon ausgehen, dass dies eine positive Ganzzahl ist) und die Größe aller Buchungen. Dies kann ein Array, eine Liste oder eine ähnliche Datenstruktur sein, wenn Ihre Sprache solche Dinge unterstützt. All dies sind positive ganze Zahlen zwischen 1 und n
. Die Reihenfolge der Buchungen ist nicht festgelegt und auch nicht wichtig.
Ausgabe. Eine Liste der Buchungsnummern, gruppiert nach Floßladungen. Die Gruppierung muss eindeutig angegeben werden, wie z.
- eine Liste oder ein Array von Arrays.
- eine durch Kommas getrennte Liste für jedes Floß. Newline zwischen jedem Floß.
Wie Sie die dritte Regel implementieren, bleibt Ihnen überlassen. Dies kann jedoch bedeuten, dass Sie die durchschnittliche Floßbelegung ermitteln und Abweichungen davon so gering wie möglich halten. Hier sind einige Testfälle.
n Bookings Output
6 [2,5] [5],[2]
4 [1,1,1,1,1] [1,1,1],[1,1]
6 [2,3,2] [2,2],[3]
6 [2,3,2,3] [2,3],[2,3]
6 [2,3,2,3,2] [2,2,2],[3,3]
12 [10,8,6,4,2] [10],[8,2],[6,4]
6 [4,4,4] [4],[4],[4]
12 [12,7,6,6] [12],[7],[6,6]
Es gelten Standardregeln, der kürzeste Code gewinnt. Habe Spaß!
Bearbeitet; Ein vorgeschlagener Weg, um so gleich wie möglich zu definieren die dritte Regel .
Nachdem die Anzahl der Flöße r
bestimmt wurde (vorbehaltlich der zweiten Regel), kann die durchschnittliche Belegung a
berechnet werden, indem die Buchungen summiert und durch dividiert werden r
. Für jedes Floß kann die Abweichung von der durchschnittlichen Belegung findet Verwendung d(x) = abs(n(x)-a)
, wo n(x)
die Zahl der Menschen in jedem Floß ist und 1 <= x <= r
. Für eine kontinuierliche, einwertige Funktion f(y)
, die streng positiv ist und eine streng positive erste und eine nicht negative zweite Ableitung für alle positiven hat y
, definieren wir eine nicht negative Größe F
als die Summe aller f(d(x)), 1 <= x <= r
. Jede Wahl der Floßzuweisung, die die ersten beiden Regeln erfüllt und bei F
der das globale Minimum gleich ist, erfüllt auch die dritte Regel.
g(y) = y
(zweite Ableitung von Null) oder g(y) = y²
(erste Ableitung von Null, wenn y = 0
) nicht verwenden können .