day 7 part 1 done, day6 seems to have an error

This commit is contained in:
attila 2018-12-07 19:26:06 +01:00
parent c9c3c17302
commit 940ccdedbb
8 changed files with 272 additions and 0 deletions

4
day6/Cargo.lock generated Normal file
View File

@ -0,0 +1,4 @@
[[package]]
name = "day6"
version = "0.1.0"

6
day6/Cargo.toml Normal file
View File

@ -0,0 +1,6 @@
[package]
name = "day6"
version = "0.1.0"
authors = ["attila <daf276@gmx.de>"]
[dependencies]

50
day6/input Normal file
View File

@ -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

66
day6/src/main.rs Normal file
View File

@ -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::<Vec<&str>>();
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::<Vec<&str>>();
let x = coords[0].parse::<i32>().unwrap();
let y = coords[2].parse::<i32>().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);
}

4
day7/Cargo.lock generated Normal file
View File

@ -0,0 +1,4 @@
[[package]]
name = "day7"
version = "0.1.0"

6
day7/Cargo.toml Normal file
View File

@ -0,0 +1,6 @@
[package]
name = "day7"
version = "0.1.0"
authors = ["attila <daf276@gmx.de>"]
[dependencies]

101
day7/input Normal file
View File

@ -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.

35
day7/src/main.rs Normal file
View File

@ -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::<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>());
}