aboutsummaryrefslogtreecommitdiff
path: root/2015/src/day02.cpp
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2024-11-11 19:34:50 +0100
committerThomas Schmucker <ts@its1.de>2024-11-11 19:34:50 +0100
commit899b3da016b0060164a4afb36738d920888ac0da (patch)
treee0a7620fd4acd54732a18c5a1b9d43d91c63216d /2015/src/day02.cpp
parentd28cd15ecccea5e123905de524858dea18008ba4 (diff)
downloadadvent-of-code-899b3da016b0060164a4afb36738d920888ac0da.tar.gz
advent-of-code-899b3da016b0060164a4afb36738d920888ac0da.tar.bz2
advent-of-code-899b3da016b0060164a4afb36738d920888ac0da.zip
aoc 2015, day02
Diffstat (limited to '2015/src/day02.cpp')
-rw-r--r--2015/src/day02.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/2015/src/day02.cpp b/2015/src/day02.cpp
new file mode 100644
index 0000000..a2d54df
--- /dev/null
+++ b/2015/src/day02.cpp
@@ -0,0 +1,57 @@
1#include <fstream>
2#include <iostream>
3#include <string>
4#include <tuple>
5#include <vector>
6
7using namespace std;
8
9auto
10read_file(string_view filename)
11{
12 fstream input{ filename };
13 vector<tuple<int, int, int>> puzzle;
14 for ( string line; getline(input, line); ) {
15 int w, h, l;
16 if ( sscanf(line.c_str(), "%dx%dx%d", &w, &h, &l) == 3 ) {
17 puzzle.emplace_back(w, h, l);
18 }
19 }
20 return puzzle;
21}
22
23void
24part1(const vector<tuple<int, int, int>>& puzzle)
25{
26 int sum = 0;
27 for ( const auto& [w, h, l]: puzzle ) {
28 auto side1 = l * w;
29 auto side2 = w * h;
30 auto side3 = h * l;
31
32 sum += 2 * side1 + 2 * side2 + 2 * side3 + min({ side1, side2, side3 });
33 }
34 cout << sum << endl;
35}
36
37void
38part2(const vector<tuple<int, int, int>>& puzzle)
39{
40 int sum = 0;
41 for ( const auto& [w, h, l]: puzzle ) {
42 auto side1 = 2 * l;
43 auto side2 = 2 * w;
44 auto side3 = 2 * h;
45
46 sum += side1 + side2 + side3 - max({ side1, side2, side3 }) + l * w * h;
47 }
48 cout << sum << endl;
49}
50
51int
52main()
53{
54 auto puzzle = read_file("data/day02.txt");
55 part1(puzzle);
56 part2(puzzle);
57}