Dank der PPCG-Community gelang es dem Weihnachtsmann, seine Geschenke in der richtigen Reihenfolge für den Einzug in das Transportdock zu sortieren. Leider sind die Schilder des Transportdocks kaputt, sodass er nicht weiß, wo er alle Geschenke aufbewahren soll! Die Geschenke sind alle gruppiert und nicht nach ihren Sortimenten, was der Weihnachtsmann zugibt, wäre eine bessere Idee gewesen.
Bestimmen Sie nun anhand der Geschenke in der sortierten Reihenfolge alle möglichen Konfigurationen für den minimalen Bereich, die dazu führen würden, dass das Geschenk in der richtigen Reihenfolge vorliegt. Das heißt, finden Sie alle Minimalbereichskonfigurationen so, dass das Sortieren der Geschenke gemäß dem Algorithmus in Herausforderung Nr. 5 die Reihenfolge nicht ändert.
Herausforderung
Eine Minimalbereichskonfiguration ist eine Liste von Bereichen, sodass die Bereiche jeweils so klein wie möglich sind. Das heißt, wenn ein Bereich für eine bestimmte Teilmenge von Geschenken bestimmt ist, müssen das Minimum und das Maximum des Bereichs mit dem der Teilmenge übereinstimmen. Mit anderen Worten, wenn Sie einen Bereich in der Abdeckung verkleinern, wird diese nicht mehr abgedeckt.
Die Herausforderung besteht darin, alle möglichen Minimalbereichskonfigurationen zu finden, die für die gegenwärtigen Größen gelten würden. Nehmen wir ein Beispiel:[3, 1, 2, 5, 4, 7, 6]
Es gibt einen trivialen Fall, der darin besteht, den Bereich der gesamten vorliegenden Konfiguration zu erfassen. In diesem Fall [[1, 7]]
wäre eine Lösung.
Bei Beispielen mit eindeutigen Elementen wäre ein weiterer trivialer Fall [[3], [1], [2], [5], [4], [7], [6]]
(da die Bereiche nicht bestellt werden müssen).
In diesem Beispiel sehen wir das auch [[1, 3], [4, 7]]
und [[1, 3], [4, 5], [6, 7]]
würden funktionieren, ebenso wie [[1, 3], [5], [4], [6, 7]]
und [[1, 3], [4, 5], [7], [6]]
.
Die endgültige Antwort für [3, 1, 2, 5, 4, 7, 6]
wäre [[[3], [1], [2], [5], [4], [7], [6]], [[3], [1], [2], [5], [4], [6, 7]], [[3], [1], [2], [4, 5], [7], [6]], [[3], [1], [2], [4, 5], [6, 7]], [[3], [1], [2], [4, 7]], [[3], [1, 2], [5], [4], [7], [6]], [[3], [1, 2], [5], [4], [6, 7]], [[3], [1, 2], [4, 5], [7], [6]], [[3], [1, 2], [4, 5], [6, 7]], [[3], [1, 2], [4, 7]], [[1, 3], [5], [4], [7], [6]], [[1, 3], [5], [4], [6, 7]], [[1, 3], [4, 5], [7], [6]], [[1, 3], [4, 5], [6, 7]], [[1, 3], [4, 7]], [[1, 5], [7], [6]], [[1, 5], [6, 7]], [[1, 7]]]
.
Formatierungsspezifikationen
Die Eingabe wird als flache Liste positiver Ganzzahlen innerhalb des angemessenen unterstützten Zahlenbereichs Ihrer Sprache in einem angemessenen Format angegeben. Die Eingabe kann doppelte Elemente enthalten. Die Ausgabe sollte als 3D-Liste positiver Ganzzahlen in einem angemessenen Format angegeben werden.
Jeder Bereich in der Ausgabe (die an der zweiten Schicht) kann entweder als dargestellt werden [min, max]
, [num]
wenn es ein Einzelwert - Bereich oder als den gesamten Bereich selbst, sondern ihr Ausgabeformat müssen konsistent sein. Bitte geben Sie an, ob Sie ein etwas anderes sinnvolles Ausgabeformat verwenden möchten.
Doppelte Werte müssen durch einen einzelnen Bereich in der Ausgabe abgedeckt werden. Das heißt, keine zwei Bereiche in der Ausgabe dürfen sich überlappen.
Ihre Lösung kann die Bereiche in beliebiger Reihenfolge zurückgeben, und dies muss nicht deterministisch sein.
Regeln
- Standardschlupflöcher gelten
- Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes
- Es wird keine Antwort akzeptiert
Testfall für eine Liste mit doppelten Elementen:
2 3 2 4 -> [[[2, 3], [4]], [[2, 4]]]
Referenzimplementierung
Der Header ist der Link.
Hinweis: Ich habe mich für diese Herausforderungsserie von Advent Of Code inspirieren lassen . Ich habe keine Verbindung zu dieser Site
Eine Liste aller Herausforderungen in der Serie finden Sie im Abschnitt "Verknüpft" der ersten Herausforderung hier .
Viel Spaß beim Golfen!