İç içe geçmiş bir liste sıralayan bir program veya işlev yazmalısınız. İşte iç içe geçmiş bir listeyi sıralamak için kurallar:
Bu listeyi örnek olarak alalım:
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Bu listedeki her eleman bir "önceliğe" sahiptir. Bir öğe bir sayı veya alt liste olarak sayılır. İlk önce, her elemanın önceliğini aynı derinlikte alın. Bir eleman sadece bir sayı ise, önceliği sayının kendisiyle aynıdır. Bir öğe bir alt liste ise, önceliği, herhangi bir alt listeyi içermeyen, içindeki tüm sayıların toplamıdır .
Dolayısıyla, derinlik 1'in tüm elemanlarının öncelikleri şunlardır:
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
Her elemanı önceliğe göre sıralayın. Bir kravat varsa, orijinal listeyle aynı sırayı korumalısınız.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
Her alt liste için tekrarlayın. Yani bu alt listede
(2, 1, (3, 4))
Önceliklerimiz şuna benziyor:
2 1 ( 7 )
(2, 1, (3, 4))
Yani sıralı, benziyor:
(1, 2, (3, 4))
(3, 4)
zaten sıralı, bu yüzden bitti. (5, 2)
Hangi sonuç için tekrarlayın (2, 5)
ve bittik! Son listemiz:
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
Kurallar:
Çok şüpheli, ancak Mathematica'nın bunun için bir şeye sahip olması durumunda, yuvalanmış liste sıralama yapılarına izin verilmez. Düzenli sıralama işlevleri vardır izin verdi.
G / Ç herhangi bir makul biçimde olabilir.
Her alt liste en az bir numara veya liste içerecektir. Ayrıca, alt listeler birkaç düzeyde derinlere yuvalanabilir. Örneğin, o sadece sublists sahip olduğundan, 0 bir önceliğe sahiptir.
(1, 2, (((3))))
(((3)))
Geçersiz listeler (eşleştirilmemiş parantezler, sayısız, yanlış parantez türleri, negatif sayılar vb.) Tanımsız davranışa neden olur.
Test G / Ç:
(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))
Bayt cinsinden en kısa cevap kazanır.