aboutsummaryrefslogtreecommitdiff
path: root/2020/src
diff options
context:
space:
mode:
Diffstat (limited to '2020/src')
-rw-r--r--2020/src/day03.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/2020/src/day03.cpp b/2020/src/day03.cpp
new file mode 100644
index 0000000..f9cf200
--- /dev/null
+++ b/2020/src/day03.cpp
@@ -0,0 +1,62 @@
1#include <fstream>
2#include <functional>
3#include <iostream>
4#include <iterator>
5#include <numeric>
6#include <string>
7#include <vector>
8using namespace std;
9
10auto
11read_file(string_view filename)
12{
13 fstream input{ filename };
14 vector<string> data;
15
16 for ( string line; getline(input, line); ) {
17 data.emplace_back(line);
18 }
19
20 return data;
21}
22
23auto
24solve(const vector<string>& puzzle, size_t delta_col, size_t delta_row)
25{
26 size_t col = 0;
27 size_t row = 0;
28
29 auto sum = 0L;
30 while ( row < puzzle.size() ) {
31 if ( puzzle[row][col] == '#' ) {
32 ++sum;
33 }
34
35 row += delta_row;
36
37 col += delta_col;
38 col %= puzzle[0].size();
39 }
40 return sum;
41}
42
43void
44part1(const vector<string>& puzzle)
45{
46 cout << solve(puzzle, 3, 1) << endl;
47}
48
49void
50part2(const vector<string>& puzzle)
51{
52 cout << solve(puzzle, 1, 1) * solve(puzzle, 3, 1) * solve(puzzle, 5, 1) * solve(puzzle, 7, 1) * solve(puzzle, 1, 2) << endl;
53}
54
55int
56main()
57{
58 const auto puzzle = read_file("data/day03.txt");
59 part1(puzzle);
60 part2(puzzle);
61}
62