This commit is contained in:
Shadowfacts 2023-12-06 13:05:02 -05:00
parent d7a1b5d9c0
commit f6c6291729
2 changed files with 82 additions and 1 deletions

80
src/day06.rs Normal file
View File

@ -0,0 +1,80 @@
pub fn run() {
let input = [
Race {
time: 35,
record: 213,
},
Race {
time: 69,
record: 1168,
},
Race {
time: 68,
record: 1086,
},
Race {
time: 87,
record: 1248,
},
];
// example
// let input = [
// Race { time: 7, record: 9 },
// Race {
// time: 15,
// record: 40,
// },
// Race {
// time: 30,
// record: 200,
// },
// ];
let product_of_ways_of_beating_races = input
.iter()
.map(|r| r.count_ways_of_beating_record())
.product::<u64>();
dbg!(product_of_ways_of_beating_races);
let input_combined = Race {
time: 35696887,
record: 213116810861248,
};
// example
// let input_combined = Race {
// time: 71530,
// record: 940200,
// };
dbg!(input_combined.count_ways_of_beating_record());
}
#[derive(Debug, Clone, Copy)]
struct Race {
time: u64,
record: u64,
}
impl Race {
fn count_ways_of_beating_record(&self) -> u64 {
let mut slowest_record_beating_speed = None;
for v in 0..self.time {
if calculate_distance(self.time, v) > self.record {
slowest_record_beating_speed = Some(v);
break;
}
}
let mut fastest_record_beating_speed = None;
for v in (0..self.time).rev() {
if calculate_distance(self.time, v) > self.record {
fastest_record_beating_speed = Some(v);
break;
}
}
fastest_record_beating_speed.unwrap() - slowest_record_beating_speed.unwrap() + 1
}
}
fn calculate_distance(total_time: u64, hold_time: u64) -> u64 {
hold_time * (total_time - hold_time)
}

View File

@ -6,7 +6,8 @@ mod day02;
mod day03;
mod day04;
mod day05;
mod day06;
fn main() {
day05::run();
day06::run();
}