Như được mô tả trong câu hỏi này :
Dropsort, được thiết kế bởi David Morgan-Mar, là một ví dụ về "thuật toán sắp xếp" thời gian tuyến tính tạo ra một danh sách, trên thực tế, được sắp xếp, nhưng chỉ chứa một số yếu tố ban đầu. Bất kỳ yếu tố nào không lớn nhất bằng mức tối đa của các yếu tố trước nó sẽ bị xóa khỏi danh sách và bị loại bỏ.
Để sử dụng một trong các trường hợp thử nghiệm của họ, đầu vào của {1, 2, 5, 4, 3, 7}
sản lượng {1, 2, 5, 7}
, 4
và 3
cả hai đều bị loại bỏ vì nhỏ hơn giá trị "được sắp xếp" trước đó , 5
.
Chúng tôi không muốn các thuật toán "sắp xếp", chúng tôi muốn chúng là thỏa thuận thực sự. Do đó, tôi muốn bạn viết một chương trình, đưa ra một danh sách các số, đưa ra một danh sách các danh sách DropSort (để trở thành một thuật toán sắp xếp hoàn chỉnh, chúng ta sẽ cần hợp nhất các danh sách này, nhưng việc hợp nhất hai danh sách đã sắp xếp đã được thực hiện trước đó và yêu cầu bạn làm lại một lần nữa là hỏi hai câu hỏi, vì vậy câu hỏi này cụ thể là bước "tách" của DropSort hoàn chỉnh của chúng tôi).
Tuy nhiên, sự sắp xếp và nội dung của danh sách của chúng tôi là rất quan trọng. Đầu ra của chương trình của bạn phải tương đương với đầu ra của DropSort, theo sau là DropSort của các giá trị bị loại bỏ, và cứ thế cho đến khi bạn chỉ có một danh sách các chuỗi được sắp xếp. Một lần nữa, mượn bộ kiểm tra hiện có (và thêm hai bộ nữa):
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}}
Bạn có thể giả sử đầu vào không trống.
Đây là mã golf , vì vậy các quy tắc tiêu chuẩn được áp dụng!
{3,4,5,3,4,5,3,4,5}
dẫn đến kết quả {{3,4,5,5,5},{3,4,4},{3}}
?
[5, 4, 3, 8, 7, 6] -> [5, 8], [4,3,7,6]
nào?