summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-12-06 17:03:25 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-12-06 17:03:25 +0200
commit0d4812c188b2fabadc520b626caa824808e9af96 (patch)
tree1067c02ffe7acd3d8078aecee91cc7a844ca1819
parentf12a53bb2af4492240f4e5d57a91a997ba3819b0 (diff)
downloadaoc-0d4812c188b2fabadc520b626caa824808e9af96.tar.xz
aoc-0d4812c188b2fabadc520b626caa824808e9af96.zip
Added a more functional style solution
-rw-r--r--2023/Rust/src/day6.rs41
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() {