day07-1
This commit is contained in:
101
input/day07.txt
Normal file
101
input/day07.txt
Normal file
@@ -0,0 +1,101 @@
|
||||
Step B must be finished before step K can begin.
|
||||
Step F must be finished before step I can begin.
|
||||
Step T must be finished before step U can begin.
|
||||
Step R must be finished before step Z can begin.
|
||||
Step N must be finished before step S can begin.
|
||||
Step X must be finished before step Y can begin.
|
||||
Step I must be finished before step Y can begin.
|
||||
Step K must be finished before step L can begin.
|
||||
Step U must be finished before step J can begin.
|
||||
Step G must be finished before step L can begin.
|
||||
Step W must be finished before step A can begin.
|
||||
Step H must be finished before step Q can begin.
|
||||
Step M must be finished before step L can begin.
|
||||
Step P must be finished before step L can begin.
|
||||
Step L must be finished before step A can begin.
|
||||
Step V must be finished before step Y can begin.
|
||||
Step Q must be finished before step Y can begin.
|
||||
Step Z must be finished before step J can begin.
|
||||
Step O must be finished before step D can begin.
|
||||
Step Y must be finished before step A can begin.
|
||||
Step J must be finished before step E can begin.
|
||||
Step A must be finished before step E can begin.
|
||||
Step C must be finished before step E can begin.
|
||||
Step D must be finished before step E can begin.
|
||||
Step S must be finished before step E can begin.
|
||||
Step B must be finished before step R can begin.
|
||||
Step U must be finished before step O can begin.
|
||||
Step X must be finished before step I can begin.
|
||||
Step C must be finished before step S can begin.
|
||||
Step O must be finished before step S can begin.
|
||||
Step J must be finished before step D can begin.
|
||||
Step O must be finished before step E can begin.
|
||||
Step Z must be finished before step O can begin.
|
||||
Step J must be finished before step C can begin.
|
||||
Step P must be finished before step Y can begin.
|
||||
Step X must be finished before step S can begin.
|
||||
Step O must be finished before step Y can begin.
|
||||
Step J must be finished before step A can begin.
|
||||
Step H must be finished before step C can begin.
|
||||
Step P must be finished before step D can begin.
|
||||
Step Z must be finished before step S can begin.
|
||||
Step T must be finished before step Z can begin.
|
||||
Step Y must be finished before step C can begin.
|
||||
Step X must be finished before step H can begin.
|
||||
Step R must be finished before step Y can begin.
|
||||
Step T must be finished before step W can begin.
|
||||
Step L must be finished before step O can begin.
|
||||
Step G must be finished before step Z can begin.
|
||||
Step H must be finished before step P can begin.
|
||||
Step I must be finished before step U can begin.
|
||||
Step H must be finished before step V can begin.
|
||||
Step N must be finished before step Y can begin.
|
||||
Step Q must be finished before step E can begin.
|
||||
Step H must be finished before step D can begin.
|
||||
Step P must be finished before step O can begin.
|
||||
Step T must be finished before step I can begin.
|
||||
Step W must be finished before step V can begin.
|
||||
Step K must be finished before step M can begin.
|
||||
Step R must be finished before step W can begin.
|
||||
Step B must be finished before step T can begin.
|
||||
Step U must be finished before step A can begin.
|
||||
Step N must be finished before step H can begin.
|
||||
Step F must be finished before step U can begin.
|
||||
Step Q must be finished before step O can begin.
|
||||
Step Y must be finished before step S can begin.
|
||||
Step V must be finished before step O can begin.
|
||||
Step W must be finished before step C can begin.
|
||||
Step Y must be finished before step J can begin.
|
||||
Step T must be finished before step V can begin.
|
||||
Step N must be finished before step D can begin.
|
||||
Step U must be finished before step Q can begin.
|
||||
Step A must be finished before step C can begin.
|
||||
Step U must be finished before step M can begin.
|
||||
Step Q must be finished before step S can begin.
|
||||
Step P must be finished before step V can begin.
|
||||
Step B must be finished before step Z can begin.
|
||||
Step W must be finished before step Q can begin.
|
||||
Step L must be finished before step S can begin.
|
||||
Step I must be finished before step P can begin.
|
||||
Step G must be finished before step P can begin.
|
||||
Step L must be finished before step C can begin.
|
||||
Step K must be finished before step A can begin.
|
||||
Step D must be finished before step S can begin.
|
||||
Step I must be finished before step H can begin.
|
||||
Step R must be finished before step M can begin.
|
||||
Step Q must be finished before step D can begin.
|
||||
Step K must be finished before step O can begin.
|
||||
Step I must be finished before step C can begin.
|
||||
Step N must be finished before step O can begin.
|
||||
Step R must be finished before step X can begin.
|
||||
Step P must be finished before step C can begin.
|
||||
Step B must be finished before step Y can begin.
|
||||
Step G must be finished before step E can begin.
|
||||
Step L must be finished before step V can begin.
|
||||
Step W must be finished before step Y can begin.
|
||||
Step C must be finished before step D can begin.
|
||||
Step M must be finished before step J can begin.
|
||||
Step F must be finished before step N can begin.
|
||||
Step T must be finished before step Q can begin.
|
||||
Step I must be finished before step E can begin.
|
||||
Step A must be finished before step D can begin.
|
||||
@@ -1,4 +1,4 @@
|
||||
fn main() {
|
||||
// aoc_2018::tasks::day06::task1();
|
||||
aoc_2018::tasks::day06::task2();
|
||||
aoc_2018::tasks::day07::task1();
|
||||
// aoc_2018::tasks::day07::task2();
|
||||
}
|
||||
|
||||
42
src/tasks/day07.rs
Normal file
42
src/tasks/day07.rs
Normal file
@@ -0,0 +1,42 @@
|
||||
use crate::utils;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
||||
pub fn task1() {
|
||||
let input = utils::read_file("input/day07.txt");
|
||||
let mut tasks: HashSet<char> = HashSet::new();
|
||||
let dependencies: Vec<(char, char)> = input
|
||||
.lines()
|
||||
.map(|line| (line.chars().nth(5).unwrap(), line.chars().nth(36).unwrap()))
|
||||
.collect();
|
||||
|
||||
let mut depends_on: HashMap<char, HashSet<char>> = HashMap::new();
|
||||
for (a, b) in dependencies {
|
||||
depends_on.entry(b).or_insert(HashSet::new()).insert(a);
|
||||
tasks.insert(a);
|
||||
tasks.insert(b);
|
||||
}
|
||||
|
||||
let mut open: HashSet<char> = tasks
|
||||
.iter()
|
||||
.filter(|task| !depends_on.contains_key(task))
|
||||
.map(|c| *c)
|
||||
.collect();
|
||||
|
||||
let mut result = String::new();
|
||||
while open.len() > 0 {
|
||||
let next = open.iter().min().unwrap().clone();
|
||||
open.remove(&next);
|
||||
result.push(next);
|
||||
let newly_open: HashSet<char> = depends_on
|
||||
.iter()
|
||||
.filter(|(task, deps)| deps.iter().all(|dep| result.chars().any(|c| c == *dep)))
|
||||
.map(|(task, _)| *task)
|
||||
.collect();
|
||||
open = open.union(&newly_open).map(|c| *c).collect();
|
||||
for c in newly_open {
|
||||
depends_on.remove(&c);
|
||||
}
|
||||
}
|
||||
|
||||
println!("{}", result);
|
||||
}
|
||||
@@ -4,3 +4,4 @@ pub mod day03;
|
||||
pub mod day04;
|
||||
pub mod day05;
|
||||
pub mod day06;
|
||||
pub mod day07;
|
||||
|
||||
Reference in New Issue
Block a user