diff options
| author | Thomas Schmucker <ts@its1.de> | 2024-11-11 19:34:50 +0100 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2024-11-11 19:34:50 +0100 |
| commit | 899b3da016b0060164a4afb36738d920888ac0da (patch) | |
| tree | e0a7620fd4acd54732a18c5a1b9d43d91c63216d /2015/src/day02.cpp | |
| parent | d28cd15ecccea5e123905de524858dea18008ba4 (diff) | |
| download | advent-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.cpp | 57 |
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 | |||
| 7 | using namespace std; | ||
| 8 | |||
| 9 | auto | ||
| 10 | read_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 | |||
| 23 | void | ||
| 24 | part1(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 | |||
| 37 | void | ||
| 38 | part2(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 | |||
| 51 | int | ||
| 52 | main() | ||
| 53 | { | ||
| 54 | auto puzzle = read_file("data/day02.txt"); | ||
| 55 | part1(puzzle); | ||
| 56 | part2(puzzle); | ||
| 57 | } | ||
