Solve day 7!
This commit is contained in:
parent
c2f7e68ad4
commit
509f796a52
|
@ -0,0 +1,49 @@
|
||||||
|
use color_eyre::{eyre::eyre, Result};
|
||||||
|
|
||||||
|
pub fn solve() -> Result<()> {
|
||||||
|
let input_data = include_str!("../../data/day_07.txt").trim();
|
||||||
|
println!("Day 07 Part 1: {}", part_1(input_data)?);
|
||||||
|
println!("Day 07 Part 2: {}", part_2(input_data)?);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_crabs(input: &str) -> Result<(Vec<isize>, isize)> {
|
||||||
|
let crabs = input
|
||||||
|
.split(",")
|
||||||
|
.map(str::parse)
|
||||||
|
.collect::<Result<Vec<_>, _>>()?;
|
||||||
|
|
||||||
|
let highest_crab = *crabs
|
||||||
|
.iter()
|
||||||
|
.max()
|
||||||
|
.ok_or(eyre!("Unable to find highest crab"))?;
|
||||||
|
|
||||||
|
Ok((crabs, highest_crab))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part_1(input: &str) -> Result<isize> {
|
||||||
|
let (crabs, highest_crab) = parse_crabs(input)?;
|
||||||
|
(0..=highest_crab)
|
||||||
|
.map(|target_position| {
|
||||||
|
crabs
|
||||||
|
.iter()
|
||||||
|
.map(|crab| (target_position - crab).abs())
|
||||||
|
.sum()
|
||||||
|
})
|
||||||
|
.min()
|
||||||
|
.ok_or(eyre!("Unable to find lowest fuel"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part_2(input: &str) -> Result<isize> {
|
||||||
|
let (crabs, highest_crab) = parse_crabs(input)?;
|
||||||
|
(0..=highest_crab)
|
||||||
|
.map(|target_position| {
|
||||||
|
crabs
|
||||||
|
.iter()
|
||||||
|
.map(|crab| (target_position - crab).abs())
|
||||||
|
.map(|steps| (steps * (steps + 1)) / 2)
|
||||||
|
.sum()
|
||||||
|
})
|
||||||
|
.min()
|
||||||
|
.ok_or(eyre!("Unable to find lowest fuel"))
|
||||||
|
}
|
|
@ -8,6 +8,7 @@ mod day_03;
|
||||||
mod day_04;
|
mod day_04;
|
||||||
mod day_05;
|
mod day_05;
|
||||||
mod day_06;
|
mod day_06;
|
||||||
|
mod day_07;
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
color_eyre::install()?;
|
color_eyre::install()?;
|
||||||
|
@ -21,6 +22,7 @@ fn main() -> Result<()> {
|
||||||
day_04::solve,
|
day_04::solve,
|
||||||
day_05::solve,
|
day_05::solve,
|
||||||
day_06::solve,
|
day_06::solve,
|
||||||
|
day_07::solve,
|
||||||
];
|
];
|
||||||
|
|
||||||
for day in days {
|
for day in days {
|
||||||
|
|
Loading…
Reference in New Issue