AdventOfCode/y2015/src/days/d2.rs
2024-10-30 11:34:40 +01:00

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);
}
}