Sekwencje przekraczania
Biorąc pod uwagę listę dodatnich liczb całkowitych A, nazwij ją rosnącą sekwencją, jeśli każdy element jest większy lub równy poprzedniemu; i nazwijmy to sekwencją malejącą, jeśli każdy element jest mniejszy lub równy poprzedniemu.
Niektóre rosnące sekwencje:
[1,2,4,7]
[3,4,4,5]
[2,2,2]
[]
Niektóre malejące sekwencje:
[7,4,2,1]
[5,4,4,3]
[2,2,2]
[]
Sekwencja przejście to lista, która może być rozłożony na dwie rozłączne podsekwencje jednej rosnącej kolejności, a drugi malejącej kolejności.
Na przykład lista:
[3,5,2,4,1]
jest sekwencją krzyżującą, ponieważ można ją podzielić na:
[3, 4 ]
[ 5,2, 1]
gdzie [3,4]jest rosnąca podsekwencja, a [5,2,1]malejąca podsekwencja. Nazwiemy taką parę (rosnącą, malejącą) podsekwencje rozkładem sekwencji krzyżującej.
Lista:
[4,5,2,1,3]
nie jest sekwencją krzyżującą; nie ma możliwości rozłożenia go na rosnącą i malejącą podsekwencję.
Twoim zadaniem jest napisanie programu / funkcji przyjmującej jako dane wejściowe listę liczb całkowitych dodatnich; a jeśli jest to sekwencja krzyżująca, zwróć dwie listy w jednym z ich rozkładów; lub jakąś spójną wartość „falsey”, jeśli lista nie jest sekwencją krzyżowania.
To jest golf golfowy ; Zwycięża najkrótszy program / funkcja w każdym języku.
Zasady:
- Dane wejściowe są elastyczne.
- Zwykłe luki są zabronione.
- Jeśli istnieje wiele prawidłowych sposobów dekompozycji danych wejściowych, możesz wyprowadzić jeden lub wszystkie z nich.
- Formatowanie wyjściowe dla rozkładu jest elastyczne; ale musi być jednoznaczne w odniesieniu do rozróżnienia między dwoma podsekwencjami.
- Możesz użyć dowolnej spójnej wartości wyjściowej, aby wskazać, że dane wejściowe nie są sekwencją przecięcia; pod warunkiem, że jest to jednoznaczne w porównaniu do wyniku dla dowolnej sekwencji krzyżowania. W odpowiedzi należy podać wartość falsey.
Przypadki testowe:
Używając Falsedo wskazania sekwencji nie przekraczających:
[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]. Obecne przypadki testowe pozwalają uciec od >=/ <, kiedy tak naprawdę powinno być >=/ <=.