use std::fs; use std::collections::HashSet; use std::collections::HashMap; use std::collections::BTreeSet; fn main() { let file = fs::read_to_string("input").expect("Unable to read file"); let lines = file.split("\n").collect::>(); let mut prerequisites = HashMap::>::new(); let mut queue = Vec::new(); for line in lines{ let words: Vec = line.chars().collect(); prerequisites.entry(words[36] as char).or_default().push(words[5]); prerequisites.entry(words[5]).or_default(); } let mut todo = prerequisites.keys().cloned().collect::>(); let mut prereq_done = HashSet::new(); while !todo.is_empty() { for c in todo.clone().into_iter() { if prerequisites.get(&c).is_none() || prerequisites.get(&c).unwrap().into_iter().all(|prerequisit| prereq_done.contains(prerequisit)){ queue.push(c); prereq_done.insert(c); todo.remove(&c); break; } } } println!("{}", queue.into_iter().collect::()); }