aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2022/src/day08.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/2022/src/day08.cpp b/2022/src/day08.cpp
index f46fdc6..b6cc3bf 100644
--- a/2022/src/day08.cpp
+++ b/2022/src/day08.cpp
@@ -60,9 +60,44 @@ part1(const vector<string>& data)
60 cout << positions.size() << endl; 60 cout << positions.size() << endl;
61} 61}
62 62
63void
64part2(const vector<string>& data)
65{
66 auto check = [&](size_t row, size_t col) -> size_t {
67 size_t mul = 1;
68 const tuple<size_t, size_t> directions[] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
69 for ( const auto& [dr, dc]: directions ) {
70 size_t step = 1;
71 for ( ;; ++step ) {
72 const auto nrow = row + step * dr;
73 const auto ncol = col + step * dc;
74
75 if (nrow >= data.size() || ncol >= data[row].size()) {
76 --step;
77 break;
78 }
79 if (data[nrow][ncol] >= data[row][col]) {
80 break;
81 }
82 }
83 mul *= step;
84 }
85 return mul;
86 };
87
88 size_t max_so_far = 0;
89 for ( size_t row = 0; row != data.size(); ++row ) {
90 for ( size_t col = 0; col != data[row].size(); ++col ) {
91 max_so_far = max(max_so_far, check(row, col));
92 }
93 }
94 cout << max_so_far << endl;
95}
96
63int 97int
64main() 98main()
65{ 99{
66 const auto grid = read_file("data/day08.txt"); 100 const auto grid = read_file("data/day08.txt");
67 part1(grid); 101 part1(grid);
102 part2(grid);
68} 103}