diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-12-06 17:03:25 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-12-06 17:03:25 +0200 |
| commit | 0d4812c188b2fabadc520b626caa824808e9af96 (patch) | |
| tree | 1067c02ffe7acd3d8078aecee91cc7a844ca1819 /2023 | |
| parent | f12a53bb2af4492240f4e5d57a91a997ba3819b0 (diff) | |
| download | aoc-0d4812c188b2fabadc520b626caa824808e9af96.tar.xz aoc-0d4812c188b2fabadc520b626caa824808e9af96.zip | |
Added a more functional style solution
Diffstat (limited to '2023')
| -rw-r--r-- | 2023/Rust/src/day6.rs | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/2023/Rust/src/day6.rs b/2023/Rust/src/day6.rs index 02dcac9..5ee6671 100644 --- a/2023/Rust/src/day6.rs +++ b/2023/Rust/src/day6.rs @@ -58,28 +58,31 @@ impl From<&str> for Race<Part2> { fn solve_part_one(data: &str) -> u64 { let race: Race<Part1> = Race::from(data); - let mut cnt = 0; - let mut ans = 1; - for (i, _) in race.times.iter().enumerate() { - for t in 0..=race.times[i] { - if (race.times[i] - t) * t > race.distances[i] { - cnt += 1; - } - } - ans *= cnt; - cnt = 0; - } - ans + race.times + .iter() + .zip(race.distances.iter()) + .map(|(&time, &distance)| { + (0..time) + .into_iter() + .filter(|t| (time - t) * t > distance) + .map(|_| distance) + .count() + }) + .product::<usize>() as u64 } fn solve_part_two(data: &str) -> u64 { let race: Race<Part2> = Race::from(data); - let mut ans = 0; - for t in 0..=race.times[0] { - if (race.times[0] - t) * t > race.distances[0] { - ans += 1; - } - } - ans + race.times + .iter() + .zip(race.distances.iter()) + .map(|(&time, &distance)| { + (0..time) + .into_iter() + .filter(|t| (time - t) * t > distance) + .map(|_| distance) + .count() + }) + .product::<usize>() as u64 } fn main() { |
