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 False
para 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
fuente
[3, 5, 2, 4, 4, 1, 1]
. Los casos de prueba actuales le permiten salirse con>=
/<
, cuando realmente debería ser>=
/<=
.Respuestas:
05AB1E ,
151413 bytesPruébelo en línea o valide todos los casos de prueba .
Explicación:
fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
110 105104 bytes[[decreasing], [increasing]]
Pruébalo en línea!
¿Cómo?
some()
fuente
Haskell, 84 bytes
Devuelve una lista de todos los
(decreasing,increasing)
pares válidos o la lista vacía si no existe dicho par.Pruébalo en línea!
fuente
Python 3 ,
109107bytesPruébalo en línea!
La función imprime todas las descomposiciones posibles en la salida estándar. Si no hay posibles descomposiciones, no se imprime nada.
Gracias a @Sriotchilism O'Zaic por sugerencias de mejora.
fuente
s<i[-1]
lugar dei[-1]>s
y similar cond[-1]<s
ambos, guardar un byte.Brachylog , 17 bytes
Pruébalo en línea!
Probablemente haya mucho espacio para jugar al golf.
fuente
Python 2 , 147 bytes
Pruébalo en línea!
fuente