Imagine que obtenemos una porción de una región montañosa, esto daría como resultado una forma similar a esta:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
Como podemos ver, podemos representar esto (hasta cierto punto) con una secuencia de enteros.
Para el propósito de este desafío, definimos un valle como una subsecuencia contigua donde los valores inicialmente están disminuyendo y desde algún punto están aumentando. Más formalmente para una secuencia un valle será índices para los cuales se cumple lo siguiente:
- El inicio y el punto final del valle son los mismos:
- el valle comienza y termina una vez que la región baja:
- el valle no es plano:
- el valle inicialmente disminuye:
- el valle aumentará en algún momento:
Ahora definimos el ancho de dicho valle como el tamaño de los índices , es decir. .
Desafío
Dado un perfil de altura (secuencia de enteros no negativos), su tarea es determinar el ancho del valle más ancho.
Ejemplo
Dado el perfil de altura [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]
, podemos visualizarlo como antes:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
aaaaaa ccccc
bbbbbbbbb
Observe cómo el segundo valle [3,2,1,0,0,1,2,2,3]
no se extiende más hacia la derecha porque el punto más a la izquierda es y no . Además, no agregamos los dos s restantes porque requerimos que el punto final esté más arriba que el segundo y último punto.
Por lo tanto, el ancho del valle más ancho es .
Reglas
- La entrada será una secuencia de enteros no negativos (lo siento, holandeses)
- puedes asumir que siempre hay al menos un valle
- La salida será el tamaño del valle más ancho como se definió anteriormente
Casos de prueba
[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]
. Todas las respuestas actuales devuelven 8, según su definición, creo que debería ser 4.[3,1,2,3]
. ej. )[4,0,4]
sería un caso así.Respuestas:
Jalea , 15 bytes
Pruébalo en línea!
O vea un conjunto de pruebas (agregué dos casos de prueba más que anteriormente no pude cumplir).
¿Cómo?
fuente
JavaScript (ES6),
1111089997 bytesPruébalo en línea!
Comentado
fuente
Python 2 ,
120115898786152149 bytesPruébalo en línea!
fuente
Retina 0.8.2 , 77 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Convierte a unario.
Lista, en lugar de contar, coincidencias superpuestas.
El comienzo del valle está capturado en
\1
. Esto no debe volver a coincidir hasta el final. Como no capturamos la coma, esto también evita que los valores más altos coincidan.Empareja los valores decrecientes. Esto
(?!1+\2)
evita que cualquier paso por el bucle sea mayor que el anterior. (La primera vez\2
no está configurada, por lo que no coincide trivialmente). La captura incluye la coma final, ya que es más golfista.Une los valores crecientes. Este tiempo
((?3)\3|\2)
significa que cada coincidencia debe ser al menos tan larga como el valor anterior, o la última captura decreciente la primera vez a través del ciclo.Finalmente, el final del valle debe tener la misma altura que el inicio.
Eliminar las alturas, dejando las comas. (Esto es un poco más fácil que contar las alturas ya que algunas de ellas podrían ser cero).
Ordenar en orden inverso, es decir, la mayoría de las comas primero.
Cuente la cantidad de comas en la primera línea, más una.
fuente
Casco , 13 bytes
Pruébalo en línea!
Explicación
Yo uso un algoritmo similar al de Jonathan Allan .
fuente
Japt , 31 bytes
Pruébalo en línea!
Ahorré 10 bytes inspirándome en la respuesta Husk de Zgarb. Todavía creo que esto se puede mejorar, pero aún no lo he encontrado.
Explicación:
fuente