pub fn process_part1(input: &str) -> i64 { input .lines() .map(|line| { line.split("x") .map(|dimension| dimension.parse::().unwrap()) .collect::>() }) .map(|dimension| { let squares = ( dimension[0] * dimension[1], dimension[0] * dimension[2], dimension[1] * dimension[2], ); squares.0.min(squares.1).min(squares.2) + squares.0 * 2 + squares.1 * 2 + squares.2 * 2 }) .sum() } pub fn process_part2(input: &str) -> i64 { input .lines() .map(|line| { line.split("x") .map(|dimension| dimension.parse::().unwrap()) .collect::>() }) .map(|dimension| { let bow = dimension[0] * dimension[1] * dimension[2]; let ribbon = { let largest = dimension[0].max(dimension[1]).max(dimension[2]); dimension[0] * 2 + dimension[1] * 2 + dimension[2] * 2 - largest * 2 }; bow + ribbon }) .sum() } #[cfg(test)] mod tests { use super::*; const INPUT: &str = "2x3x4 1x1x10"; #[test] fn part1() { let result = process_part1(INPUT); assert_eq!(result, 101); } #[test] fn part2() { let result = process_part2(INPUT); assert_eq!(result, 48); } }