day06 part 1

This commit is contained in:
OMGeeky
2023-12-13 16:09:18 +00:00
parent f7dc13c433
commit 970701cc02
4 changed files with 90 additions and 1 deletions

2
input/day06.txt Normal file
View File

@@ -0,0 +1,2 @@
Time: 55 99 97 93
Distance: 401 1485 2274 1405

83
src/day06.rs Normal file
View File

@@ -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<Race>,
}
#[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) -> <Day06 as Day>::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<String> 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 }
}
}

View File

@@ -20,6 +20,8 @@ mod day04;
pub use day04::*; pub use day04::*;
mod day05; mod day05;
pub use day05::*; pub use day05::*;
mod day06;
pub use day06::*;
pub mod utils { pub mod utils {
#[macro_export] #[macro_export]

View File

@@ -6,7 +6,9 @@ fn main() {
// Day03::run_all(); // Day03::run_all();
// Day03::part1(); // Day03::part1();
// Day04::run_all(); // Day04::run_all();
Day05::part2(); // Day05::run_all();
// Day06::run_all();
Day06::part1();
// utils::run!(01); // utils::run!(01);
// utils::run!(02); // utils::run!(02);