Jak opisano w tym pytaniu :
Dropsort, zaprojektowany przez Davida Morgana-Mar, jest przykładem „algorytmu sortowania” w czasie liniowym, który tworzy listę, która jest faktycznie posortowana, ale zawiera tylko niektóre oryginalne elementy. Każdy element, który nie jest co najmniej tak duży, jak maksymalna liczba elementów poprzedzających, jest po prostu usuwany z listy i odrzucany.
Aby użyć jednego ze swoich przypadków testowych, wejście z {1, 2, 5, 4, 3, 7}
wydajnością {1, 2, 5, 7}
, jak 4
i 3
oba spadły za to, że mniejsze niż poprzednio „posortowane” wartości 5
.
Nie chcemy algorytmów „sortujących”, chcemy, żeby były prawdziwą okazją. Dlatego chcę, abyś napisał program, który, biorąc pod uwagę listę liczb, wyświetla listę list DropSorted (aby być kompletnym algorytmem sortowania, musielibyśmy scalić te listy, ale wcześniej scalono dwie listy posortowane i prośba o zrobienie tego ponownie to prawie dwa pytania, więc to pytanie jest konkretnie krokiem „podziału” naszego kompletnego DropSortu).
Rozmieszczenie i zawartość naszych list jest jednak kluczowa. Dane wyjściowe programu muszą odpowiadać wynikom DropSort, a następnie DropSort odrzuconych wartości i tak dalej, dopóki nie będzie tylko listy posortowanych łańcuchów. Ponownie, pożyczając istniejący zestaw testów (i dodając dwa kolejne):
Input -> Output
{1, 2, 5, 4, 3, 7} -> {{1, 2, 5, 7}, {4}, {3}}
{10, -1, 12} -> {{10, 12}, {-1}}
{-7, -8, -5, 0, -1, 1} -> {{-7, -5, 0, 1}, {-8, -1}}
{9, 8, 7, 6, 5} -> {{9}, {8}, {7}, {6}, {5}}
{10, 13, 17, 21} -> {{10, 13, 17, 21}}
{10, 10, 10, 9, 10} -> {{10, 10, 10, 10}, {9}} //Note equivalent values aren't dropped
{5, 4, 3, 8, 7, 6} -> {{5, 8}, {4, 7}, {3, 6}}
{0, 2, 5, 4, 0, 7} -> {{0, 2, 5, 7}, {4}, {0}}
Możesz założyć, że dane wejściowe nie są puste.
To jest golf golfowy , więc obowiązują standardowe zasady!
{3,4,5,3,4,5,3,4,5}
skutkować {{3,4,5,5,5},{3,4,4},{3}}
?
[5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]
?