From d6a7fc6fc6dc6ea5cfb1974e913193bfdb1527c7 Mon Sep 17 00:00:00 2001 From: spectre Date: Fri, 8 Dec 2023 01:03:22 +0100 Subject: [PATCH] day 06 --- aoc2023/src/day06.rs | 39 +++++++++++++++++++++++++++++++++++++++ aoc2023/src/lib.rs | 1 + data/2023/day06 | 2 ++ src/main.rs | 4 ++-- 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 aoc2023/src/day06.rs create mode 100644 data/2023/day06 diff --git a/aoc2023/src/day06.rs b/aoc2023/src/day06.rs new file mode 100644 index 0000000..c7dabfd --- /dev/null +++ b/aoc2023/src/day06.rs @@ -0,0 +1,39 @@ +use std::iter::zip; +use shared::{Solution, Answer}; + +pub struct Day06; + +impl Solution for Day06 { + fn part_1(&self, input: &str) -> Answer { + let data: Vec<&str> = input.split("\n").collect(); + let times: Vec = data[0].split_whitespace().skip(1).map(|x| x.parse::().unwrap()).collect(); + let dists: Vec = data[1].split_whitespace().skip(1).map(|x| x.parse::().unwrap()).collect(); + + let mut out: u64 = 1; + + for (t, d) in zip(times, dists) { + let mut win: u64 = 0; + for time in 1..t { + if time * (t-time) > d { win +=1 } + } + out *= win + } + + Answer::from(out) + } + + fn part_2(&self, input: &str) -> Answer { + let data: Vec<&str> = input.split("\n").collect(); + let time: u64 = data[0].split_whitespace().skip(1).collect::>().join("").parse::().unwrap(); + let dist: u64 = data[1].split_whitespace().skip(1).collect::>().join("").parse::().unwrap(); + + let mut win: u64 = 0; + + for t in 1..time { + if t * (time - t) > dist { win += 1 } + } + + Answer::from(win) + } +} + diff --git a/aoc2023/src/lib.rs b/aoc2023/src/lib.rs index 05fe1c4..81969de 100644 --- a/aoc2023/src/lib.rs +++ b/aoc2023/src/lib.rs @@ -2,3 +2,4 @@ pub mod day01; pub mod day02; pub mod day03; pub mod day05; +pub mod day06; diff --git a/data/2023/day06 b/data/2023/day06 new file mode 100644 index 0000000..a523b19 --- /dev/null +++ b/data/2023/day06 @@ -0,0 +1,2 @@ +Time: 60 80 86 76 +Distance: 601 1163 1559 1300 \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 8216fe0..5086759 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,10 +9,10 @@ use std::time::Instant; fn main() { let now = Instant::now(); - let Ok(data) = load(2023, 5) + let Ok(data) = load(2023, 6) else { return; }; - let result = aoc2023::day05::Day05.part_2(&data); + let result = aoc2023::day06::Day06.part_2(&data); let elapsed = now.elapsed();