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
fonte
[3, 5, 2, 4, 4, 1, 1]
. Os casos de teste atuais permitem que você se dê bem com>=
/<
, quando realmente deveria ser>=
/<=
.Respostas:
05AB1E ,
151413 bytesExperimente online ou valide todos os casos de teste .
Explicação:
fonte
Gelatina , 12 bytes
Experimente online!
fonte
JavaScript (ES6),
110 105104 bytes[[decreasing], [increasing]]
Experimente online!
Como?
some()
fonte
Haskell, 84 bytes
Retorna uma lista de todos os
(decreasing,increasing)
pares válidos ou a lista vazia, se não houver esse par.Experimente online!
fonte
Python 3 ,
109107 bytesExperimente online!
A função imprime todas as decomposições possíveis na saída padrão. Se não houver decomposições possíveis, nada será impresso.
Obrigado a @Sriotchilism O'Zaic pelas sugestões de melhoria.
fonte
s<i[-1]
umi[-1]>s
e não semelhanted[-1]<s
, ambos salve um byte.Braquilog , 17 bytes
Experimente online!
Provavelmente há espaço considerável para jogar isso.
fonte
Python 2 , 147 bytes
Experimente online!
fonte