diff --git a/aoc_2024/src/day21.rs b/aoc_2024/src/day21.rs index 2412680..ffe1fdc 100644 --- a/aoc_2024/src/day21.rs +++ b/aoc_2024/src/day21.rs @@ -138,7 +138,7 @@ impl DirButton { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq)] enum NumButton { One, Two, @@ -191,10 +191,10 @@ impl NumButton { if start.0 == 0 && end.1 == 3 { let mut x = [None, None, None, None, None, None]; (0..dx).for_each(|i| { - x[i] = Some(bx.clone()); + x[i] = Some(bx); }); (0..dy).for_each(|i| { - x[i + dx] = Some(by.clone()); + x[i + dx] = Some(by); }); x[dx + dy] = Some(DirButton::A); [ @@ -207,10 +207,10 @@ impl NumButton { } else if end.0 == 0 && start.1 == 3 { let mut y = [None, None, None, None, None, None]; (0..dx).for_each(|i| { - y[i + dy] = Some(bx.clone()); + y[i + dy] = Some(bx); }); (0..dy).for_each(|i| { - y[i] = Some(by.clone()); + y[i] = Some(by); }); y[dx + dy] = Some(DirButton::A); [ @@ -224,12 +224,12 @@ impl NumButton { let mut x = [None, None, None, None, None, None]; let mut y = [None, None, None, None, None, None]; (0..dx).for_each(|i| { - x[i] = Some(bx.clone()); - y[i + dy] = Some(bx.clone()); + x[i] = Some(bx); + y[i + dy] = Some(bx); }); (0..dy).for_each(|i| { - x[i + dx] = Some(by.clone()); - y[i] = Some(by.clone()); + x[i + dx] = Some(by); + y[i] = Some(by); }); x[dx + dy] = Some(DirButton::A); y[dx + dy] = Some(DirButton::A); @@ -316,9 +316,9 @@ fn precompute_steps(steps: &mut [DistanceMatrix]) { fn shortest_dir_path(path: Path, steps: &mut [DistanceMatrix]) -> usize { path.path - .into_iter() + .iter() .flatten() - .fold((0, DirButton::A), |acc, next| { + .fold((0, &DirButton::A), |acc, next| { let sum = acc.0; let pos = acc.1; @@ -329,14 +329,14 @@ fn shortest_dir_path(path: Path, steps: &mut [DistanceMatrix]) -> usize { .0 } -fn shortest_path(path: Vec, steps: &mut [DistanceMatrix]) -> usize { - path.into_iter() - .fold((0, NumButton::A), |acc, end| { +fn shortest_path(path: &[NumButton], steps: &mut [DistanceMatrix]) -> usize { + path.iter() + .fold((0, &NumButton::A), |acc, end| { let sum = acc.0; let start = acc.1; let extension = start - .to(&end) + .to(end) .into_iter() .flatten() .map(|path| shortest_dir_path(path, steps)) @@ -355,7 +355,6 @@ fn part1(input: &Input) -> usize { input .iter() - .cloned() .map(|(num, path)| num * shortest_path(path, &mut steps)) .sum() } @@ -368,7 +367,6 @@ fn part2(input: &Input) -> usize { input .iter() - .cloned() .map(|(num, path)| num * shortest_path(path, &mut steps)) .sum() }