Betrachten Sie eine eindimensionale Folge von Zahlen innerhalb eines festgelegten Bereichs, d. H
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
Der immer größer werdende Graph * ** ist eine Linie, die alle Punkte in dieser Sequenz von links nach rechts verbindet und immer nach oben zeigt oder eben bleibt. Bei Bedarf wird die Linie von oben nach unten gewickelt und steigt von dort weiter an, um den nächsten Punkt zu erreichen.
Das Ziel dieser Herausforderung ist es, die Sequenz in verschiedene Teilsequenzen zu unterteilen, die alle nicht abnehmen, sodass sie, wenn sie zusammen mit einer begrenzten vertikalen Achse geplottet werden, einen immer größer werdenden Graphen bilden. Dies erfolgt durch Hinzufügen eines Punkts am Ende einer Teilsequenz und am Anfang der nächsten Teilsequenz, sodass der Winkel der Linie, die die obere Grenze kreuzt, mit der Linie, die die untere Grenze kreuzt, und den beiden Kreuzungspunkten übereinstimmt haben die gleiche horizontale Koordinate. Das obige Beispiel würde die folgende Ausgabe ergeben:
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
Und das entsprechende Diagramm sieht folgendermaßen aus:
Und zur besseren
Übersicht mit erweiterter Achse:
Die erforderliche Ausgabe ist eine Liste von Teilsequenzen, die die Teile des immer größer werdenden Diagramms bilden. Das Erstellen eines Plots ist nicht erforderlich, bringt Ihnen jedoch Bonuspunkte;). Die Ausgabe muss die Teilsequenzen in irgendeiner Weise klar trennen.
Anmerkungen
- Der Bereich wird immer Null als linke (inklusive) Grenze haben, und die rechte Grenze wird eine ganze Zahl N sein.
- Die Sequenz enthält niemals Werte, die nicht innerhalb des Bereichs liegen.
- Die erste Teilsequenz hat am Anfang keinen zusätzlichen Punkt.
- Die letzte Untersequenz hat am Ende keinen zusätzlichen Punkt.
- Es ist nicht erforderlich, die Startindizes anzugeben, die zum Zeichnen der Teilsequenzen erforderlich wären.
Testfälle
Input: [0, 2, 4, 6, 1, 3, 5, 0], 7
Output: [0, 2, 4, 6, 8], [-1, 1, 3, 5, 7], [-2, 0]
Input: [1, 1, 2, 3, 5, 8, 3, 1], 10
Output: [1, 1, 2, 3, 5, 8, 13],[-2, 3, 11],[-7, 1]
Input: [5, 4, 3, 2, 1], 10
Output: [5, 14],[-5, 4, 13],[-6, 3, 12],[-7, 2, 11],[-8, 1]
Input: [0, 1, 4, 9, 16, 15, 0], 17
Output: [0, 1, 4, 9, 16, 32], [-1, 15, 17], [-2, 0]
Wertung
Dies ist Code-Golf, der kürzeste Code in Bytes gewinnt.
* Nicht der eigentliche Jargon ** Eigentlich sollte man Ever Non-Decreasing Graph nennen, wie @ngm betont hat, aber das klingt weniger beeindruckend.