Imaginez que nous obtenions une tranche d'une région montagneuse, cela donnerait une forme similaire à ceci:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
Comme nous pouvons le voir, nous pouvons représenter cela (dans une certaine mesure) avec une séquence d'entiers.
Aux fins de ce défi, nous définissons une vallée comme une sous-séquence contiguë où les valeurs diminuent initialement et à partir d'un certain point elles augmentent. Plus formellement pour une séquence une vallée sera des indices pour lesquels:
- le début et la fin de la vallée sont les mêmes:
- la vallée commence et se termine une fois la région plus basse:
- la vallée n'est pas plate:
- la vallée décroît initialement:
- la vallée augmentera à un moment donné:
Maintenant, nous définissons la largeur d'une telle vallée comme la taille des indices , ie. .
Défi
Étant donné un profil de hauteur (séquence d'entiers non négatifs), votre tâche consiste à déterminer la largeur de la vallée la plus large.
Exemple
Compte tenu du profil de hauteur [1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2]
, nous pouvons le visualiser comme précédemment:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
aaaaaa ccccc
bbbbbbbbb
Notez que la deuxième vallée [3,2,1,0,0,1,2,2,3]
ne s'étend pas plus à droite car le point le plus à gauche est et non . De plus, nous n'ajoutons pas les deux s restants car nous exigeons que le point final soit plus haut que l'avant-dernier point.
Par conséquent, la largeur de la vallée la plus large est de .
Règles
- L'entrée sera une séquence d'entiers non négatifs (désolé pour les Néerlandais)
- vous pouvez supposer qu'il y a toujours au moins une vallée
- La sortie sera la taille de la vallée la plus large définie ci-dessus
Cas de test
[4,0,4] -> 3
[1,0,1,0,1] -> 3
[1,0,2,0,1,2] -> 4
[13,13,13,2,2,1,0,1,14,2,13,14] -> 4
[1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2] -> 9
[3,2,0,1,0,0,1,3] -> 4
[3,2,0,1,0,0,1,3]
. Toutes les réponses actuelles renvoient 8, selon votre définition, je pense que cela devrait être 4.[3,1,2,3]
)[4,0,4]
serait un tel cas.Réponses:
Gelée , 15 octets
Essayez-le en ligne!
Ou voir une suite de tests (ajout de deux cas de test supplémentaires que je n'ai pas réussi à remplir auparavant).
Comment?
la source
JavaScript (ES6),
1111089997 octetsEssayez-le en ligne!
Commenté
la source
Python 2 ,
120115898786152149 octetsEssayez-le en ligne!
la source
Retina 0.8.2 , 77 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez en unaire.
Liste, plutôt que de compter, les correspondances qui se chevauchent.
Le début de la vallée est capturé
\1
. Cela ne doit alors plus correspondre jusqu'à la fin. Comme nous ne capturons pas la virgule, cela empêche également les valeurs plus élevées de correspondre.Faites correspondre les valeurs décroissantes. Le
(?!1+\2)
empêche tout passage à travers la boucle d'être supérieur au précédent. (La première fois\2
que le processus n'est pas défini, il ne correspond pas de manière triviale.) La capture inclut la virgule de fin car c'est golfier.Faites correspondre les valeurs croissantes. Ce temps
((?3)\3|\2)
signifie que chaque correspondance doit être au moins aussi longue que la valeur précédente, ou la dernière capture décroissante la première fois dans la boucle.Enfin, la fin de la vallée doit être à la même hauteur que le début.
Supprimez les hauteurs en laissant les virgules. (C'est un peu plus facile que de compter les hauteurs car certaines peuvent être nulles.)
Trier dans l'ordre inverse, c'est-à-dire la plupart des virgules en premier.
Comptez le nombre de virgules sur la première ligne, plus un.
la source
Husk , 13 octets
Essayez-le en ligne!
Explication
J'utilise un algorithme similaire à Jonathan Allan .
la source
Japt , 31 octets
Essayez-le en ligne!
Enregistré 10 octets en s'inspirant de la réponse Husk de Zgarb. Je pense toujours que cela peut être amélioré, mais je ne l'ai pas encore trouvé.
Explication:
la source