From 00000140d3c7298ef00a7eb2c899524585496a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Wed, 6 Dec 2023 09:18:29 +0100 Subject: [PATCH] solution: day 6 clean --- src/bin/06.rs | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/bin/06.rs b/src/bin/06.rs index f4be2cb..3761d00 100644 --- a/src/bin/06.rs +++ b/src/bin/06.rs @@ -1,5 +1,3 @@ -use aoc::parsers::to_vec; - fn win_options((time, distance): (u64, u64)) -> u64 { let discriminant = ((time.pow(2) - 4 * distance) as f64).sqrt(); @@ -14,28 +12,34 @@ fn win_options((time, distance): (u64, u64)) -> u64 { } pub fn part_one(input: &str) -> Option { - let (upt, upd) = input.split_once('\n')?; - let time: Vec = to_vec(upt.strip_prefix("Time: ")?, ' '); - let distance: Vec = to_vec(upd.strip_prefix("Distance: ")?, ' '); + let [time, distance] = input + .lines() + .map(|l| { + l.split_whitespace() + .skip(1) + .filter_map(|n| n.parse().ok()) + .collect::>() + }) + .collect::>() + .try_into() + .ok()?; Some(time.into_iter().zip(distance).map(win_options).product()) } pub fn part_two(input: &str) -> Option { - let (upt, upd) = input.split_once('\n')?; - let time: u64 = upt - .strip_prefix("Time: ")? - .split(' ') - .flat_map(|x| x.chars()) - .collect::() - .parse() - .ok()?; - let distance: u64 = upd - .strip_prefix("Distance: ")? - .split(' ') - .flat_map(|x| x.chars()) - .collect::() - .parse() + let [time, distance] = input + .lines() + .filter_map(|l| { + l.split_whitespace() + .skip(1) + .flat_map(|x| x.chars()) + .collect::() + .parse() + .ok() + }) + .collect::>() + .try_into() .ok()?; Some(win_options((time, distance)))