diff --git a/res/06/example b/res/06/example new file mode 100644 index 0000000..28f5ae9 --- /dev/null +++ b/res/06/example @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 diff --git a/res/06/input b/res/06/input new file mode 100644 index 0000000..c6865a5 --- /dev/null +++ b/res/06/input @@ -0,0 +1,2 @@ +Time: 51 92 68 90 +Distance: 222 2031 1126 1225 diff --git a/src/days/d06.rs b/src/days/d06.rs new file mode 100644 index 0000000..e2f1c12 --- /dev/null +++ b/src/days/d06.rs @@ -0,0 +1,51 @@ +use std::fs; + +pub fn solve() { + let path = "res/06/input"; + + let contents = fs::read_to_string(path).expect("I/O error, wrong path?"); + //let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?")); + + let times: Vec = contents.lines().next().unwrap().split_whitespace().skip(1).map(|s| s.parse::().unwrap()).collect(); + let records: Vec = contents.lines().skip(1).next().unwrap().split_whitespace().skip(1).map(|s| s.parse::().unwrap()).collect(); + + let distances: Vec> = times + .iter() + .map(|t| { + (0..*t).map(|load_t| { + load_t * (t-load_t) + }) + .collect::>() + }) + .collect(); + + let result: usize = distances.iter() + .enumerate() + .map(|(i, dist)| { + dist.iter() + .filter(|d| **d > records[i]) + .count() + }) + .product(); + + println!("Result 1: {}", result); + + let act_time: usize = times.iter() + .map(|t| t.to_string()) + .collect::() + .parse() + .unwrap(); + let act_record: usize = records.iter() + .map(|t| t.to_string()) + .collect::() + .parse() + .unwrap(); + + let result: usize = (0..act_time).map(|load_t| { + load_t * (act_time-load_t) + }) + .filter(|d| *d > act_record) + .count(); + + println!("Result 2: {}", result); +} diff --git a/src/main.rs b/src/main.rs index 91826f1..ea898da 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ pub mod days; fn main() { - days::d05::solve() + days::d06::solve() //_all_days() }