Secuencias de cruce
Dada una lista de enteros positivos A, llámela secuencia creciente si cada elemento es mayor o igual que el anterior; y llamarlo una secuencia decreciente si cada elemento es menor o igual que el anterior.
Algunas secuencias crecientes:
[1,2,4,7]
[3,4,4,5]
[2,2,2]
[]
Algunas secuencias decrecientes:
[7,4,2,1]
[5,4,4,3]
[2,2,2]
[]
Una secuencia cruzada es una lista que puede descomponerse en dos subsecuencias disjuntas, una secuencia creciente y la otra secuencia decreciente.
Por ejemplo, la lista:
[3,5,2,4,1]
es una secuencia cruzada, ya que se puede descomponer en:
[3, 4 ]
[ 5,2, 1]
donde [3,4]está la subsecuencia creciente y [5,2,1]es la subsecuencia decreciente. Llamaremos a este par de subsecuencias (crecientes, decrecientes) una descomposición de la secuencia de cruce.
La lista:
[4,5,2,1,3]
no es una secuencia cruzada; no hay forma de descomponerlo en una subsecuencia creciente y decreciente.
Su tarea es escribir un programa / función tomando como entrada una lista de enteros positivos; y si es una secuencia cruzada, devuelva las dos listas en una de sus descomposiciones; o algún valor consistente de "falsey" si la lista no es una secuencia cruzada.
Este es el código de golf ; El programa / función más corto en cada idioma es el ganador.
Reglas:
- La entrada es flexible.
- Las lagunas habituales están prohibidas.
- Si hay varias formas válidas de descomponer la entrada, puede generar una o todas ellas.
- El formato de salida para la descomposición es flexible; pero debe ser inequívoco con respecto a la distinción entre las dos subsecuencias.
- Puede usar cualquier valor de salida consistente para indicar que la entrada no es una secuencia cruzada; siempre que no sea ambiguo en comparación con la salida para cualquier secuencia de cruce. Debe especificar el valor de falsey en su respuesta.
Casos de prueba:
Utilizando Falsepara indicar secuencias no cruzadas:
[3, 5, 2, 4, 1] => [3, 4], [5, 2, 1]
[3, 5, 2, 4, 4, 1, 1] => [3, 4, 4], [5, 2, 1, 1]
[7, 9, 8, 8, 6, 11] => [7, 8, 8, 11], [9, 6]
[7, 9, 8, 8, 6, 11] => [7, 9, 11], [8, 8, 6] # also valid
[7, 9, 8, 8, 6, 11] => [7, 8, 11], [9, 8, 6] # also valid
[7, 8, 9, 10, 20, 30] => [7, 8, 9, 20, 30], [10]
[7, 8, 9, 10, 20, 30] => [8, 9, 10, 20, 30], [7] # this is also valid
[5, 5, 5] => [5, 5, 5], []
[4, 5, 2, 1, 3] => False
[3, 4, 3, 4, 5, 2, 4] => False
[3, 5, 2, 4, 4, 1, 1]. Los casos de prueba actuales le permiten salirse con >=/ <, cuando realmente debería ser >=/ <=.