Sequências de cruzamento
Dada uma lista de números inteiros positivos A
, chame-a de uma sequência crescente se cada elemento for maior ou igual ao anterior; e chame-a de sequência decrescente se cada elemento for menor ou igual ao anterior.
Algumas sequências crescentes:
[1,2,4,7]
[3,4,4,5]
[2,2,2]
[]
Algumas sequências decrescentes:
[7,4,2,1]
[5,4,4,3]
[2,2,2]
[]
Uma sequência de cruzamento é uma lista que pode ser decomposta em duas subsequências separadas, uma sequência crescente e outra sequência decrescente.
Por exemplo, a lista:
[3,5,2,4,1]
é uma sequência de cruzamento, pois pode ser decomposta em:
[3, 4 ]
[ 5,2, 1]
onde [3,4]
é a subsequência crescente e [5,2,1]
é a subsequência decrescente. Vamos chamar esse par de subsequências (crescentes, decrescentes) de decomposição da sequência de cruzamento.
A lista:
[4,5,2,1,3]
não é uma sequência de cruzamento; não há como decompor em uma subsequência crescente e decrescente.
Sua tarefa é escrever um programa / função, tendo como entrada uma lista de números inteiros positivos; e se for uma sequência cruzada, retorne as duas listas em uma de suas decomposições; ou algum valor consistente de "falsey" se a lista não for uma sequência de cruzamentos.
Isso é código-golfe ; o programa / função mais curto em cada idioma é o vencedor.
Regras:
- A entrada é flexível.
- As brechas usuais são proibidas.
- Se houver várias maneiras válidas de decompor a entrada, você poderá gerar uma ou todas elas.
- A formatação de saída para a decomposição é flexível; mas deve ser inequívoco em relação à distinção entre as duas subsequências.
- Você pode usar qualquer valor de saída consistente para indicar que a entrada não é uma sequência de cruzamento; desde que não seja ambíguo em comparação com a saída de qualquer sequência de cruzamento. Você deve especificar o valor de falsey na sua resposta.
Casos de teste:
Usando False
para indicar seqüências sem cruzamento:
[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]
. Os casos de teste atuais permitem que você se dê bem com >=
/ <
, quando realmente deveria ser >=
/ <=
.