Considérons une séquence unidimensionnelle de nombres dans une plage fixe, c'est-à-dire
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
Le graphique toujours croissant * ** est une ligne qui relie tous les points de cette séquence de gauche à droite, et monte toujours ou reste au niveau. Si nécessaire, la ligne s'enroule de haut en bas et continue de monter à partir de là pour atteindre le point suivant.
Le but de ce défi est de diviser la séquence en différentes sous-séquences qui ne sont pas toutes décroissantes, de sorte que lorsqu'elles sont tracées avec un axe vertical limité, elles formeront un graphique toujours croissant. Cela se fait en ajoutant un point a à la fin d'une sous-séquence et au début de la sous-séquence suivante, de sorte que l'angle de la ligne qui traverse la limite supérieure s'aligne avec la ligne qui traverse la limite inférieure et les deux points de croisement ont la même coordonnée horizontale. L'exemple ci-dessus donnerait la sortie suivante:
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
Et le graphique correspondant se présente comme suit: Et avec l'axe étendu pour une meilleure vue: La sortie requise est une liste de sous-séquences qui forment les parties du graphique toujours croissant. Faire un complot n'est pas obligatoire mais vous rapportera des points bonus;). La sortie doit clairement séparer les sous-séquences d'une manière ou d'une autre.
Remarques
- La plage aura toujours zéro comme limite gauche (incluse) et la limite droite sera un entier N.
- La séquence ne contiendra jamais de valeurs qui ne sont pas dans la plage.
- La première sous-séquence n'a pas de point supplémentaire au début.
- La dernière sous-séquence n'a pas de point supplémentaire à la fin.
- Il n'est pas nécessaire de fournir les indices de départ qui seraient nécessaires pour tracer les sous-séquences.
Cas de test
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]
Notation
C'est le code-golf, le code le plus court en octets gagne.
* Pas de jargon réel ** En fait, devrait être appelé Ever Non-Decraining Graph, comme l'a souligné @ngm, mais cela semble moins impressionnant.