diff options
| author | nekineki <nekineki@nekineki.net> | 2023-12-06 07:03:16 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2023-12-06 07:03:16 +0100 |
| commit | 293f08fcda4f822bed35bb06f81534d89faf230c (patch) | |
| tree | 2867e2c698b3c3784c191a3d8c3282325622cd49 /2023 | |
| parent | 1de6fa0b6ae0ef0279df7640683173aa15743646 (diff) | |
day06
Diffstat (limited to '2023')
| -rw-r--r-- | 2023/day06.rs | 62 | ||||
| -rw-r--r-- | 2023/in/day06.pzl | 2 | ||||
| -rw-r--r-- | 2023/in/day06.ref | 2 |
3 files changed, 66 insertions, 0 deletions
diff --git a/2023/day06.rs b/2023/day06.rs new file mode 100644 index 0000000..7ba165e --- /dev/null +++ b/2023/day06.rs @@ -0,0 +1,62 @@ +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_mut)] +use std::fs::File; +use std::io::Read; + +fn get_opts(t: u64, d: u64) -> u64 { + let mut opts = 0; + for wait in 0..t { + if wait * (t - wait) > d { + opts += 1; + } + } + return opts; +} + +fn main() { + // let filename = "in/day06.ref"; + let filename = "in/day06.pzl"; + + let mut f = File::open(filename).expect("cannot open file"); + let mut content = String::new(); + f.read_to_string(&mut content).expect("cannot read file"); + + let mut lines = content.trim_end().split('\n'); + let parse1 = |l: &str| { + l.split_once(":") + .unwrap() + .1 + .split(" ") + .filter_map(|x| x.parse::<u64>().ok()) + .collect::<Vec<u64>>() + }; + let time = parse1(lines.next().unwrap()); + let dist = parse1(lines.next().unwrap()); + let res1 = time + .into_iter() + .zip(dist.into_iter()) + .map(|(t, d)| get_opts(t, d)) + .fold(1, |acc, x| acc * x); + + let mut lines = content.trim_end().split('\n'); + let parse1 = |l: &str| { + l.split_once(":") + .unwrap() + .1 + .split(" ") + .filter(|s| !s.is_empty()) + .collect::<Vec<_>>() + .join("") + .parse::<u64>() + .unwrap() + }; + let time = parse1(lines.next().unwrap()); + let dist = parse1(lines.next().unwrap()); + let res2 = get_opts(time, dist); + + println!("res1: {}", res1); + println!("res2: {}", res2); + assert_eq!(res1, 220320); + assert_eq!(res2, 34454850); +} diff --git a/2023/in/day06.pzl b/2023/in/day06.pzl new file mode 100644 index 0000000..01c2b63 --- /dev/null +++ b/2023/in/day06.pzl @@ -0,0 +1,2 @@ +Time: 59 79 65 75 +Distance: 597 1234 1032 1328 diff --git a/2023/in/day06.ref b/2023/in/day06.ref new file mode 100644 index 0000000..28f5ae9 --- /dev/null +++ b/2023/in/day06.ref @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 |
