AdventOfCode/day7/src/main.rs

35 lines
1.1 KiB
Rust
Raw Normal View History

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::<Vec<&str>>();
let mut prerequisites = HashMap::<char, Vec<char>>::new();
let mut queue = Vec::new();
for line in lines{
let words: Vec<char> = 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::<BTreeSet<_>>();
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::<String>());
}