diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-03-15 11:15:02 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-03-15 11:15:02 +0800 |
commit | 1a768c1b8d69986c1cafcf5ead8a1f0424cefcbe (patch) | |
tree | e64e58553a1bb5ef6f502f6972efbb5efbd51389 /src/2015/day2/aoc.cpp | |
parent | 869443933e5686433ef92fbcad7cd377017651b2 (diff) | |
download | advent-of-code-1a768c1b8d69986c1cafcf5ead8a1f0424cefcbe.tar.gz advent-of-code-1a768c1b8d69986c1cafcf5ead8a1f0424cefcbe.zip |
day2 part2
Diffstat (limited to 'src/2015/day2/aoc.cpp')
-rw-r--r-- | src/2015/day2/aoc.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/2015/day2/aoc.cpp b/src/2015/day2/aoc.cpp index 33ae6b6..a23d9ad 100644 --- a/src/2015/day2/aoc.cpp +++ b/src/2015/day2/aoc.cpp @@ -35,23 +35,33 @@ box parse_day2(line_view lv) { return b; } -inline int min_day2(box b) { +inline int min_square(box b) { int x1 = b.l * b.w; int x2 = b.l * b.h; int x3 = b.h * b.w; return std::min(std::min(x1, x2), x3); } +inline int min_perimeter(box b) { + int x1 = b.l + b.w; + int x2 = b.l + b.h; + int x3 = b.h + b.w; + return 2 * std::min(std::min(x1, x2), x3); +} + inline int surface(box b) { return 2 * b.l * b.w + 2 * b.l * b.h + 2 * b.w * b.h; } +inline int squire(box b) { return b.l * b.w * b.h; } -int day2(line_view input) { +std::pair<int, int> day2(line_view input) { int total = 0; - per_line(input, [&total](line_view line) { + int ribbon = 0; + per_line(input, [&total, &ribbon](line_view line) { box b = parse_day2(line); - total += surface(b) + min_day2(b); + total += surface(b) + min_square(b); + ribbon += squire(b) + min_perimeter(b); return true; }); - return total; + return {total, ribbon}; } } // namespace aoc2015 |