1
Fork 0

Solve day 7!

This commit is contained in:
Bauke 2021-12-07 14:24:37 +01:00
parent c2f7e68ad4
commit 509f796a52
Signed by: Bauke
GPG Key ID: C1C0F29952BCF558
2 changed files with 51 additions and 0 deletions

49
source/day_07/mod.rs Normal file
View File

@ -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"))
}

View File

@ -8,6 +8,7 @@ mod day_03;
mod day_04;
mod day_05;
mod day_06;
mod day_07;
fn main() -> Result<()> {
color_eyre::install()?;
@ -21,6 +22,7 @@ fn main() -> Result<()> {
day_04::solve,
day_05::solve,
day_06::solve,
day_07::solve,
];
for day in days {