mirror of
https://github.com/OMGeeky/advent-of-code-2023.git
synced 2026-02-23 15:38:26 +01:00
day06 part 1
This commit is contained in:
2
input/day06.txt
Normal file
2
input/day06.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Time: 55 99 97 93
|
||||||
|
Distance: 401 1485 2274 1405
|
||||||
83
src/day06.rs
Normal file
83
src/day06.rs
Normal 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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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]
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user