From 970701cc02ae500cd58c2c01af45296e84cb52f0 Mon Sep 17 00:00:00 2001 From: OMGeeky <39029799+OMGeeky@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:09:18 +0000 Subject: [PATCH] day06 part 1 --- input/day06.txt | 2 ++ src/day06.rs | 83 +++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ src/main.rs | 4 ++- 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 input/day06.txt create mode 100644 src/day06.rs diff --git a/input/day06.txt b/input/day06.txt new file mode 100644 index 0000000..1f72c92 --- /dev/null +++ b/input/day06.txt @@ -0,0 +1,2 @@ +Time: 55 99 97 93 +Distance: 401 1485 2274 1405 \ No newline at end of file diff --git a/src/day06.rs b/src/day06.rs new file mode 100644 index 0000000..68c6999 --- /dev/null +++ b/src/day06.rs @@ -0,0 +1,83 @@ +use crate::*; + +pub struct Day06; +impl Day for Day06 { + const DAY_NUM: u8 = 6; + type Input = Scoreboard; + type Output = u64; + + fn get_test_data() -> Self::Input { + "Time: 7 15 30 +Distance: 9 40 200" + .to_string() + .into() + } + + fn get_test_result() -> Self::Output { + 288 + } + + fn run(data: Self::Input) -> Self::Output { + dbg!(&data); + data.races + .iter() + .map(Race::get_amount_of_winning_accelarations) + .product() + } +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Scoreboard { + races: Vec, +} +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Race { + duration: u64, + distance: u64, +} +impl Race { + fn get_amount_of_winning_accelarations(&self) -> ::Output { + if self.distance == 0 { + dbg!("This makes little sense"); + return self.duration; + } + let mut result = 0; + for i in 0..self.duration { + let time_left = self.duration - i; + if i * time_left > self.distance{ + result += 1; + } + } + result + } +} + +impl From for Scoreboard { + fn from(value: String) -> Self { + let mut lines = value.lines(); + let durations = lines + .next() + .unwrap() + .trim() + .strip_prefix("Time:") + .unwrap() + .trim() + .split_ascii_whitespace(); + let distances = lines + .next() + .unwrap() + .trim() + .strip_prefix("Distance:") + .unwrap() + .trim() + .split_ascii_whitespace(); + let mut races = vec![]; + for (duration, distance) in durations.zip(distances) { + let duration: u64 = duration.parse().unwrap(); + let distance: u64 = distance.parse().unwrap(); + races.push(Race { duration, distance }); + } + + Self { races } + } +} diff --git a/src/lib.rs b/src/lib.rs index 6742f7b..eee46e8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,6 +20,8 @@ mod day04; pub use day04::*; mod day05; pub use day05::*; +mod day06; +pub use day06::*; pub mod utils { #[macro_export] diff --git a/src/main.rs b/src/main.rs index 59276a5..cd713c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,7 +6,9 @@ fn main() { // Day03::run_all(); // Day03::part1(); // Day04::run_all(); - Day05::part2(); + // Day05::run_all(); + // Day06::run_all(); + Day06::part1(); // utils::run!(01); // utils::run!(02);