aboutsummaryrefslogtreecommitdiff
path: root/2017/src/day02.cpp
diff options
context:
space:
mode:
Diffstat (limited to '2017/src/day02.cpp')
-rw-r--r--2017/src/day02.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/2017/src/day02.cpp b/2017/src/day02.cpp
new file mode 100644
index 0000000..5f965bd
--- /dev/null
+++ b/2017/src/day02.cpp
@@ -0,0 +1,71 @@
1#include <algorithm>
2#include <filesystem>
3#include <fstream>
4#include <iostream>
5#include <sstream>
6#include <string>
7#include <vector>
8
9using namespace std;
10
11namespace {
12
13vector<vector<int>>
14read_file(const filesystem::path& filename)
15{
16 ifstream file{ filename };
17 vector<vector<int>> grid;
18
19 for ( string line; getline(file, line); ) {
20 stringstream strm{ line };
21
22 vector<int> row;
23
24 for ( int value{}; strm >> value; ) {
25 row.emplace_back(value);
26 }
27
28 grid.emplace_back(row);
29 }
30
31 return grid;
32}
33
34void
35part1(const vector<vector<int>>& grid)
36{
37 int checksum = 0;
38 for ( const auto& row: grid ) {
39 auto [min, max] = ranges::minmax_element(row);
40 checksum += *max - *min;
41 }
42 cout << "Part1: " << checksum << '\n';
43}
44
45void
46part2(const vector<vector<int>>& grid)
47{
48 int checksum = 0;
49 for ( auto row: grid ) {
50 ranges::sort(row, ranges::greater());
51
52 for ( auto it = row.begin(); it != row.end(); ++it ) {
53 for ( auto it2 = next(it); it2 != row.end(); ++it2 ) {
54 if ( *it % *it2 == 0 ) {
55 checksum += *it / *it2;
56 }
57 }
58 }
59 }
60 cout << "Part2: " << checksum << '\n';
61}
62
63} // namespace
64
65int
66main()
67{
68 auto grid = read_file("data/day02.txt");
69 part1(grid);
70 part2(grid);
71}