From 940ccdedbb4fb7b974b25261cfd66dcf6ce2e12a Mon Sep 17 00:00:00 2001 From: attila Date: Fri, 7 Dec 2018 19:26:06 +0100 Subject: [PATCH] day 7 part 1 done, day6 seems to have an error --- day6/Cargo.lock | 4 ++ day6/Cargo.toml | 6 +++ day6/input | 50 +++++++++++++++++++++++ day6/src/main.rs | 66 +++++++++++++++++++++++++++++++ day7/Cargo.lock | 4 ++ day7/Cargo.toml | 6 +++ day7/input | 101 +++++++++++++++++++++++++++++++++++++++++++++++ day7/src/main.rs | 35 ++++++++++++++++ 8 files changed, 272 insertions(+) create mode 100644 day6/Cargo.lock create mode 100644 day6/Cargo.toml create mode 100644 day6/input create mode 100644 day6/src/main.rs create mode 100644 day7/Cargo.lock create mode 100644 day7/Cargo.toml create mode 100644 day7/input create mode 100644 day7/src/main.rs diff --git a/day6/Cargo.lock b/day6/Cargo.lock new file mode 100644 index 0000000..079ab9a --- /dev/null +++ b/day6/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day6" +version = "0.1.0" + diff --git a/day6/Cargo.toml b/day6/Cargo.toml new file mode 100644 index 0000000..37622f5 --- /dev/null +++ b/day6/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day6" +version = "0.1.0" +authors = ["attila "] + +[dependencies] diff --git a/day6/input b/day6/input new file mode 100644 index 0000000..667d0f9 --- /dev/null +++ b/day6/input @@ -0,0 +1,50 @@ +135, 127 +251, 77 +136, 244 +123, 169 +253, 257 +359, 309 +100, 247 +191, 323 +129, 323 +76, 284 +69, 56 +229, 266 +74, 216 +236, 130 +152, 126 +174, 319 +315, 105 +329, 146 +288, 51 +184, 344 +173, 69 +293, 80 +230, 270 +279, 84 +107, 163 +130, 176 +347, 114 +133, 331 +237, 300 +291, 283 +246, 297 +60, 359 +312, 278 +242, 76 +81, 356 +204, 291 +187, 335 +176, 98 +103, 274 +357, 144 +314, 118 +67, 196 +156, 265 +254, 357 +218, 271 +118, 94 +300, 189 +290, 356 +354, 91 +209, 334 \ No newline at end of file diff --git a/day6/src/main.rs b/day6/src/main.rs new file mode 100644 index 0000000..e0c01fd --- /dev/null +++ b/day6/src/main.rs @@ -0,0 +1,66 @@ +use std::fs; +use std::collections::HashSet; +use std::collections::HashMap; + +fn main() { + let file = fs::read_to_string("input").expect("Unable to read file"); + let lines = file.split("\n").collect::>(); + + let mut anchorpoints = HashSet::new(); + let mut points_nearest_to_anchor = HashMap::new(); + + let mut min_x = std::i32::MAX; + let mut min_y = std::i32::MAX; + let mut max_x = 0; + let mut max_y = 0; + + for line in lines { + let coords = line.split(|c| c == ',' || c == ' ').collect::>(); + let x = coords[0].parse::().unwrap(); + let y = coords[2].parse::().unwrap(); + + anchorpoints.insert((x,y)); + + if x < min_x { min_x = x.clone(); } + if y < min_y { min_y = y.clone(); } + if x > max_x { max_x = x.clone(); } + if y > max_y { max_y = y.clone(); } + } + + for i in min_x..(max_x+1) { + for j in min_y..(max_y+1) { + let mut winning_x = 0; + let mut winning_y = 0; + let mut min_dist = std::i32::MAX; + let mut second_min_dist = std::i32::MAX; + + for (x,y) in &anchorpoints{ + let dist = (x - i + y - j).abs(); + + if dist < min_dist{ + min_dist = dist; + winning_x = x.clone(); + winning_y = y.clone(); + } else if dist < second_min_dist { + second_min_dist = dist; + } + } + + if min_dist != second_min_dist { + *points_nearest_to_anchor.entry((winning_x,winning_y)).or_insert(1) += 1; + } + } + } + + let mut largest_area = 0; + + for area in points_nearest_to_anchor.values() { + if *area > largest_area { + largest_area = *area; + } + + println!("{}", *area); + } + + println!("{}", largest_area); +} diff --git a/day7/Cargo.lock b/day7/Cargo.lock new file mode 100644 index 0000000..8ca18fd --- /dev/null +++ b/day7/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day7" +version = "0.1.0" + diff --git a/day7/Cargo.toml b/day7/Cargo.toml new file mode 100644 index 0000000..d28518a --- /dev/null +++ b/day7/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day7" +version = "0.1.0" +authors = ["attila "] + +[dependencies] diff --git a/day7/input b/day7/input new file mode 100644 index 0000000..8d2ea6e --- /dev/null +++ b/day7/input @@ -0,0 +1,101 @@ +Step A must be finished before step R can begin. +Step J must be finished before step B can begin. +Step D must be finished before step B can begin. +Step X must be finished before step Z can begin. +Step H must be finished before step M can begin. +Step B must be finished before step F can begin. +Step Q must be finished before step I can begin. +Step U must be finished before step O can begin. +Step T must be finished before step W can begin. +Step V must be finished before step S can begin. +Step N must be finished before step P can begin. +Step P must be finished before step O can begin. +Step E must be finished before step C can begin. +Step F must be finished before step O can begin. +Step G must be finished before step I can begin. +Step Y must be finished before step Z can begin. +Step M must be finished before step K can begin. +Step C must be finished before step W can begin. +Step L must be finished before step W can begin. +Step W must be finished before step S can begin. +Step Z must be finished before step O can begin. +Step K must be finished before step S can begin. +Step S must be finished before step R can begin. +Step R must be finished before step I can begin. +Step O must be finished before step I can begin. +Step A must be finished before step Q can begin. +Step Z must be finished before step R can begin. +Step T must be finished before step R can begin. +Step M must be finished before step O can begin. +Step Q must be finished before step Z can begin. +Step V must be finished before step C can begin. +Step Y must be finished before step W can begin. +Step N must be finished before step F can begin. +Step J must be finished before step D can begin. +Step D must be finished before step N can begin. +Step B must be finished before step M can begin. +Step P must be finished before step I can begin. +Step W must be finished before step Z can begin. +Step Q must be finished before step V can begin. +Step V must be finished before step K can begin. +Step B must be finished before step Z can begin. +Step M must be finished before step I can begin. +Step G must be finished before step C can begin. +Step K must be finished before step O can begin. +Step E must be finished before step O can begin. +Step C must be finished before step I can begin. +Step X must be finished before step G can begin. +Step B must be finished before step T can begin. +Step B must be finished before step I can begin. +Step E must be finished before step F can begin. +Step N must be finished before step K can begin. +Step D must be finished before step W can begin. +Step R must be finished before step O can begin. +Step V must be finished before step I can begin. +Step T must be finished before step O can begin. +Step B must be finished before step Q can begin. +Step T must be finished before step L can begin. +Step M must be finished before step C can begin. +Step A must be finished before step M can begin. +Step F must be finished before step L can begin. +Step X must be finished before step T can begin. +Step G must be finished before step K can begin. +Step C must be finished before step L can begin. +Step D must be finished before step Z can begin. +Step H must be finished before step L can begin. +Step P must be finished before step Z can begin. +Step A must be finished before step V can begin. +Step G must be finished before step R can begin. +Step E must be finished before step G can begin. +Step D must be finished before step P can begin. +Step X must be finished before step L can begin. +Step U must be finished before step C can begin. +Step Z must be finished before step K can begin. +Step E must be finished before step W can begin. +Step B must be finished before step Y can begin. +Step J must be finished before step I can begin. +Step U must be finished before step P can begin. +Step Y must be finished before step L can begin. +Step N must be finished before step L can begin. +Step L must be finished before step S can begin. +Step H must be finished before step P can begin. +Step P must be finished before step S can begin. +Step J must be finished before step S can begin. +Step J must be finished before step U can begin. +Step H must be finished before step T can begin. +Step L must be finished before step I can begin. +Step N must be finished before step Z can begin. +Step A must be finished before step G can begin. +Step H must be finished before step S can begin. +Step S must be finished before step I can begin. +Step H must be finished before step E can begin. +Step W must be finished before step R can begin. +Step B must be finished before step G can begin. +Step U must be finished before step Y can begin. +Step J must be finished before step G can begin. +Step M must be finished before step L can begin. +Step G must be finished before step Z can begin. +Step N must be finished before step W can begin. +Step D must be finished before step E can begin. +Step A must be finished before step W can begin. +Step G must be finished before step Y can begin. \ No newline at end of file diff --git a/day7/src/main.rs b/day7/src/main.rs new file mode 100644 index 0000000..fdb50a1 --- /dev/null +++ b/day7/src/main.rs @@ -0,0 +1,35 @@ +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::()); +} \ No newline at end of file