From d0b988bb748038ec88b63d4d7ba0885be8221bed Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Wed, 5 Dec 2018 18:13:02 +0100 Subject: day03 --- day03.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 day03.rs (limited to 'day03.rs') diff --git a/day03.rs b/day03.rs new file mode 100644 index 0000000..2fe5db5 --- /dev/null +++ b/day03.rs @@ -0,0 +1,46 @@ +use std::fs::File; +use std::collections::{HashSet, HashMap}; +use std::io::{BufRead, BufReader}; + +fn main() { + let f = File::open("day03").unwrap(); + + let d: Vec<_> = BufReader::new(&f) + .lines() + .map(|line| { + let line = line.unwrap(); + let v: Vec<&str> = line.split( + |c| c == '#' || c == ',' || c == ' ' || c == 'x' || c == ':' + ).collect(); + ( + v[1].parse::().unwrap(), + v[3].parse::().unwrap(), + v[4].parse::().unwrap(), + v[6].parse::().unwrap(), + v[7].parse::().unwrap(), + ) + }) + .collect(); + + let mut seen = HashMap::new(); + let mut seen_twice = HashSet::new(); + + let mut claims: HashSet<_> = d.iter().map(|x| x.0).collect(); + + for v in d { + for x in v.1..v.1 + v.3 { + for y in v.2..v.2 + v.4 { + if let Some(id) = seen.insert((x, y), v.0) { + seen_twice.insert((x, y)); + claims.remove(&id); + claims.remove(&v.0); + } + } + } + } + + println!("{}", seen_twice.len()); + for c in claims { + println!("{}", c) + } +} -- cgit 1.4.1