Առաջադրանքների պատշաճ իրականացում
Արագ զարգացող տեխնոլոգիական ընկերությունում դուք աշխատում եք որպես նախագծի ղեկավար։ Չնայած դուք նոր եք անցել աշխատանքի, բայց ձեզ է հանձնվում բարդ և բազմազան առաջադրանքների ցանկը կառավարելու պատասխանատվությունը: Այս ցուցակը, սակայն, պարզ ցուցակ չէ, այլ հիերարխիկ բնույթ ունի, որտեղ յուրաքանչյուր առաջադրանք կարող է ունենալ իր հետ կապված բազմաթիվ ենթաառաջադրանքներ: Առաջադրանքը և ենթաառաջադրանքները ներկայացված են ներդիր ցուցակում, որտեղ յուրաքանչյուր տարր կա՛մ մեկ առաջադրանք է (որպես տող), կա՛մ ենթախնդիրների ցանկ:
Ձեր խնդիրն է գրել ռեկուրսիվ ֆունկցիա, որը կանցնի այս հիերարխիայով և կտպի բոլոր առաջադրանքները և ենթաառաջադրանքներն ա՛յն հերթականությամբ, որով դրանք հայտնվում են ներդրված ցանկում: Ելքում յուրաքանչյուր ենթաառաջադրանք պետք է լինի մեկ մատ խորքից, որպեսզի ցանկը լինի դյուրընթեռնելի և հասկանալի։
Մուտքում տրված է «n» առաջադրանքների և ենթաառաջադրանքների ներդիր ցուցակ: Ցանկի յուրաքանչյուր տարր կա՛մ առաջադրանք է (որպես տող), կա՛մ մեկ այլ ցուցակ, որը ներկայացնում է ենթաառաջադրանքները: Կարող եք օգտագործել
eval(input())
-ը կամ json.loads(...)
-ը մուտքի տվյալները ցուցակի վերածելու համար։Ծրագիրը պետք է տպի բոլոր առաջադրանքները և ենթաառաջադրանքները որպես տողեր՝ պահպանելով ցուցակի հերթականությունը: Յուրաքանչյուր ենթաառաջադրանք պետք է լինի մեկ մատ խորքից՝ այսպիսով առանձնանալով իր հիմնական առաջադրանքից:
Մուտք | Ելք |
["Task 1", ["Subtask 1.1", "Subtask 1.2", ["Subtask 1.2.1", "Subtask 1.2.2"], "Subtask 1.3"], "Task 2", ["Subtask 2.1"]] | Task 1
Subtask 1.1
Subtask 1.2
Subtask 1.2.1
Subtask 1.2.2
Subtask 1.3
Task 2
Subtask 2.1 |
Նշում․ ելքում յուրաքանչյուր tab (մեկ մատ խորք) ներկայացված է՝
\t
նիշով (symbol): Բացի այդ, ելքի մեջ առաջադրանքների և ենթաառաջադրանքների հերթականությունը պետք է ունենա նույն հաջորդականությունը, ինչ մուտքագրված ցուցակում:Constraints
Time limit: 1 seconds
Memory limit: 512 MB
Output limit: 1 MB