feat: day 6
This commit is contained in:
parent
8cb6a0fee2
commit
1f7ed1bf1e
3 changed files with 52 additions and 0 deletions
2
.aoc-cache/6.txt
Normal file
2
.aoc-cache/6.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Time: 58 99 64 69
|
||||
Distance: 478 2232 1019 1071
|
48
src/bin/day_6.rs
Normal file
48
src/bin/day_6.rs
Normal file
|
@ -0,0 +1,48 @@
|
|||
use aoc_2022::prelude::*;
|
||||
use color_eyre::eyre::ContextCompat;
|
||||
use std::fmt::Write;
|
||||
|
||||
type Input = Vec<(isize, isize)>;
|
||||
|
||||
fn parse(s: &str) -> Result<Input> {
|
||||
let (time, distance) = s.split_once("\n")
|
||||
.wrap_err("invalid format")?;
|
||||
Ok(ints(time).into_iter().zip(ints(distance)).collect::<Vec<_>>())
|
||||
}
|
||||
|
||||
fn race_calc((total_time, target_distance): (isize, isize)) -> usize {
|
||||
let a = 1.0;
|
||||
let b = -total_time as f64;
|
||||
let c = target_distance as f64;
|
||||
let v1 = (-b + (b*b - 4.0*a*c).sqrt()) / 2.0*a;
|
||||
let v2 = (-b - (b*b - 4.0*a*c).sqrt()) / 2.0*a;
|
||||
let min = v1.min(v2) + 0.00001;
|
||||
let max = v1.max(v2) - 0.00001;
|
||||
let min = min.ceil() as i64;
|
||||
let max = max.floor() as i64;
|
||||
(min..=max).count()
|
||||
}
|
||||
|
||||
#[aoc(day = 6, parse = parse, test_cases = ["day_6.txt"])]
|
||||
fn day_6(mut input: Input) -> Result<()> {
|
||||
// Part 1
|
||||
println!("Part one: ");
|
||||
let result: usize = input.iter().copied().map(race_calc).product();
|
||||
println!("{result}");
|
||||
|
||||
// Part 2
|
||||
println!("Part two: ");
|
||||
let mut total_time = String::new();
|
||||
let mut target_distance = String::new();
|
||||
for (t, d) in &input {
|
||||
write!(total_time, "{t}")?;
|
||||
write!(target_distance, "{d}")?;
|
||||
}
|
||||
let total_time = total_time.parse()?;
|
||||
let target_distance = target_distance.parse()?;
|
||||
println!("{total_time} {target_distance}");
|
||||
let result = race_calc((total_time, target_distance));
|
||||
println!("{result}");
|
||||
|
||||
Ok(())
|
||||
}
|
2
test_cases/day_6.txt
Normal file
2
test_cases/day_6.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
Time: 7 15 30
|
||||
Distance: 9 40 200
|
Loading…
Reference in a new issue