Bạn phải viết một chương trình hoặc hàm sắp xếp danh sách lồng nhau. Dưới đây là các quy tắc để sắp xếp danh sách lồng nhau:
Hãy lấy danh sách này làm ví dụ:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Mỗi yếu tố trong danh sách này có một "ưu tiên". Một phần tử được tính là một số hoặc một danh sách con. Đầu tiên, có được sự ưu tiên của từng yếu tố ở cùng độ sâu. Nếu một phần tử chỉ là một số, thì mức độ ưu tiên của nó giống với chính số đó. Nếu một phần tử là một danh sách con, mức độ ưu tiên của nó là tổng của tất cả các số trong đó, không bao gồm bất kỳ danh sách phụ nào.
Vì vậy, các ưu tiên của tất cả các yếu tố của độ sâu 1 là:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Sắp xếp từng yếu tố theo mức độ ưu tiên. Nếu có cà vạt, bạn phải giữ nguyên thứ tự như danh sách ban đầu.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Lặp lại cho mỗi danh sách phụ. Vì vậy, trong danh sách phụ này
(2, 1, (3, 4))
Các ưu tiên của chúng tôi trông như:
2 1 ( 7 )
(2, 1, (3, 4))
Sắp xếp như vậy, có vẻ như:
(1, 2, (3, 4))
(3, 4)
đã được sắp xếp, vậy là xong. Lặp lại cho (5, 2)
kết quả (2, 5)
và chúng tôi đã hoàn tất! Danh sách cuối cùng của chúng tôi là:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Quy tắc:
Rất đáng nghi ngờ, nhưng chỉ trong trường hợp Mathematica có một cái gì đó cho điều này, không có nội dung sắp xếp danh sách lồng nhau nào được phép. Chức năng phân loại thường xuyên được cho phép.
I / O có thể ở bất kỳ định dạng hợp lý.
Mỗi danh sách phụ sẽ chứa ít nhất một số hoặc danh sách. Ngoài ra, danh sách con có thể được lồng nhiều cấp độ sâu. Ví dụ: trong
(1, 2, (((3))))
đó(((3)))
có mức độ ưu tiên là 0, vì nó chỉ có danh sách con trong đó.Danh sách không hợp lệ (dấu ngoặc đơn không trùng khớp, không phải số, loại dấu ngoặc sai, số âm, v.v.) dẫn đến hành vi không xác định.
Kiểm tra I / O:
(1, 2, 3) ---> (1, 2, 3)
(1, 2, 6, 3, 9, 8) ---> (1, 2, 3, 6, 8, 9)
(4, 3, (2), (1)) ---> ((1), (2), 3, 4)
(4, 3, (2), ((1))) ---> (((1)), (2), 3, 4)
(5, (1, 2, (9, 8))) ---> ((1, 2, (8, 9)), 5)
(3, (1, 2), (2, 1)) ---> (3, (1, 2), (1, 2))
(3, (1, 2, (99)), (2, 1, (34))) ---> (3, (1, 2, (99)), (1, 2, (34)))
(7, 2, (1, (9, 12)), (4, 3, 2, (1, 2))) ---> ((1, (9, 12)), 2, 7, (2, 3, (1, 2), 4))
Câu trả lời ngắn nhất trong byte thắng.