#365
The Curriculum Conundrum
 

Difficulty:Medium
Topics:Real life cases List of Maps


Mission: "Curriculum Conundrum" membutuhkan keahlian elo untuk mengoptimalkan jadwal mata pelajaran. Setiap mata pelajaran memiliki list prasyarat yang harus dipenuhi sebelum bisa diambil. Diberikan sebuah map :subjects yang berisi :subject-id dengan list :prerequisites-nya, susun rencana studi dalam vector yang menunjukkan urutan pengambilan mata pelajaran sehingga semua prasyarat terpenuhi. Urutan dalam vector penting karena menunjukkan urutan pengambilan. Jika ada lebih dari satu solusi, return salah satunya; jika tidak ada solusi karena adanya circular dependencies, return nil.
test not run
(= (__ {:subjects {101 [] 102 [101] 103 [101 102]}})
   [101 102 103])
test not run
(= (__ {:subjects {101 [102] 102 [103] 103 []}})
   [103 102 101])
test not run
(= (__ {:subjects {101 [102] 102 [101]}})
   nil) ; Circular dependency
test not run
(= (__ {:subjects {101 [] 102 [] 103 []}})
   [101 102 103])


Code which fills in the blank: