58 lines
1.4 KiB
Rust
58 lines
1.4 KiB
Rust
pub fn process_part1(input: &str) -> i64 {
|
|
input
|
|
.lines()
|
|
.map(|line| {
|
|
line.split("x")
|
|
.map(|dimension| dimension.parse::<i64>().unwrap())
|
|
.collect::<Vec<i64>>()
|
|
})
|
|
.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::<i64>().unwrap())
|
|
.collect::<Vec<i64>>()
|
|
})
|
|
.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);
|
|
}
|
|
}
|