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.
Réponses:
Gelée , 20 octets
Essayez-le en ligne!
Les suites sont divisées par
0.5
.la source
R ,
179158151 octetsEssayez-le en ligne!
Edit: Le code est maintenant une fonction et prend une entrée. (Merci à Giuseppe, user202729 et JayCe pour l'avoir signalé calmement)
Edit: -21 octets suggérés par Giuseppe.
Modifier: -7 octets en supprimant
d=NULL;
.la source
s[p+1]-((m+s[p+1])-s[p])
simplifies[p]-m
, et vous avezd=c(c(...))
où seulementd=c(...)
est nécessaire. Je soupçonne fortement qu'il y a une façon golfique mais c'est toujours une bonne réponse.d
même être initialisé?Python 2 , 60 octets
L'entrée est N, suivie de tous les points comme arguments individuels. Les séquences de sortie sont séparées par
0.5
.Essayez-le en ligne!
Python 2 ,
927768 octetsLes suites sont séparées par
[...]
.Essayez-le en ligne!
la source
Propre ,
279269258 octetsEssayez-le en ligne!
la source
JavaScript (Node.js) ,
10482 octetsEssayez-le en ligne! Port de la réponse Python de @ ovs.
la source
Haskell,
828180 octetsCeci est un portage de ma réponse Clean .
Essayez-le en ligne!
-1, -1 grâce à Laikoni
la source
f
localement sans parenthèses autour du:
motif, comme danslet x<r@(a:_):s|...
.Nettoyer , 92 octets
Essayez-le en ligne!
L'argument opérateur de
foldr
est un lambda avec garde; il est analysé comme:J'ai porté cela à Haskell .
la source
Clean ,
11010910410097 bytesEssayez-le en ligne!
-1 octet grâce à Keelan
la source
Haskell , 82 octets
Essayez-le en ligne! Port de mon réponse Clean .
Alternative, également 82 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 98 octets
Essayez-le en ligne!C'est un peu plus long que l'autre réponse JS, mais il utilise une approche différente.
Explication non golfée et simplifiée
la source
JavaScript (Node.js) , 48 octets, tableaux séparés par
,,
Essayez-le en ligne!
JavaScript (Node.js) , 50 octets, tableaux séparés par
|
Essayez-le en ligne!
la source