From af98c60972eba709590c93d61f4363d87a21627b Mon Sep 17 00:00:00 2001 From: Johannes Date: Sat, 7 Dec 2024 07:23:00 +0100 Subject: [PATCH] day 7 cleanup --- src/day07.rs | 53 +++++++++++----------------------------------------- 1 file changed, 11 insertions(+), 42 deletions(-) diff --git a/src/day07.rs b/src/day07.rs index 5dcf05f..e3f8d35 100644 --- a/src/day07.rs +++ b/src/day07.rs @@ -22,24 +22,22 @@ fn part1(input: &str) -> RiddleResult { .map(|capture| capture.as_str().parse::().unwrap()) .collect_vec() }) - .filter(|v| well_calibrated(v, false)) + .filter(|v| well_calibrated(v)) .map(|v| v[0]) .sum() } -fn well_calibrated(list: &Vec, concat: bool) -> bool { +fn well_calibrated(list: &[i64]) -> bool { let expected = list[0]; let operands = list.iter().skip(1).copied().collect_vec(); - let operators = ops(operands.len() - 1, concat); + let operators = ops(operands.len() - 1); for ops in operators.into_iter() { - // dbg!(&ops); let v = ops .into_iter() .zip(operands.iter().skip(1)) .fold(operands[0], |acc, (op, val)| match op { '*' => acc * val, '+' => acc + val, - '|' => format!("{acc}{val}").parse().unwrap(), _ => panic!(), }); if v == expected { @@ -49,46 +47,18 @@ fn well_calibrated(list: &Vec, concat: bool) -> bool { false } -fn ops(n: usize, concat: bool) -> Vec> { +fn ops(n: usize) -> Vec> { if n == 1 { - let mut v = vec![vec!['+'], vec!['*']]; - if concat { - v.push(vec!['|']); - } - return v; + return vec![vec!['+'], vec!['*']]; } - let v = ops(n - 1, concat); + let v = ops(n - 1); v.into_iter() .flat_map(|vector| { - if !concat { - let mut v1 = vector.clone(); - let mut v2 = vector; - v1.push('+'); - v2.push('*'); - - vec![v1, v2] - } else { - let mut v1 = vector.clone(); - let mut v2 = vector.clone(); - let mut v3 = vector.clone(); - let mut v4 = vector.clone(); - let mut v5 = vector.clone(); - let mut v6 = vector.clone(); - let mut v7 = vector.clone(); - let mut v8 = vector.clone(); - let mut v9 = vector; - v1.push('+'); - v2.push('+'); - v3.push('+'); - v4.push('*'); - v5.push('*'); - v6.push('*'); - v7.push('|'); - v8.push('|'); - v9.push('|'); - - vec![v1, v2, v3, v4, v5, v6, v7, v8, v9] - } + let mut v1 = vector.clone(); + let mut v2 = vector; + v1.push('+'); + v2.push('*'); + [v1, v2] }) .collect_vec() } @@ -122,7 +92,6 @@ fn well(expected: i64, acc: i64, operands: &[i64]) -> bool { well(expected, v_mul, remainder) || well(expected, v_plus, remainder) || well(expected, v_concat, remainder) - // _ => panic!(), } #[cfg(test)]