aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/day16.cpp35
1 files changed, 15 insertions, 20 deletions
diff --git a/src/day16.cpp b/src/day16.cpp
index 68defad..c2cd365 100644
--- a/src/day16.cpp
+++ b/src/day16.cpp
@@ -50,8 +50,8 @@ solve(const vector<string>& lines, tuple<size_t, size_t, unsigned int> start)
50 positions.pop(); 50 positions.pop();
51 51
52 while ( true ) { 52 while ( true ) {
53 col += get<0>(movement[dir]); // NOLINT 53 col += get<0>(movement.at(dir % 4));
54 row += get<1>(movement[dir]); // NOLINT 54 row += get<1>(movement.at(dir % 4));
55 55
56 if ( row >= lines.size() || col >= lines[0].size() ) { 56 if ( row >= lines.size() || col >= lines[0].size() ) {
57 break; 57 break;
@@ -65,31 +65,26 @@ solve(const vector<string>& lines, tuple<size_t, size_t, unsigned int> start)
65 65
66 const auto chr = lines[row][col]; 66 const auto chr = lines[row][col];
67 67
68 if ( chr == '|' && (dir == DIR_LEFT || dir == DIR_RIGHT) ) { 68 if ( (chr == '|' && (dir == DIR_LEFT || dir == DIR_RIGHT)) ||
69 dir = (dir + 1) % 4; 69 (chr == '-' && (dir == DIR_UP || dir == DIR_DOWN)) ) {
70 positions.emplace(row, col, (dir + 2) % 4); 70 dir = dir + 1;
71 positions.emplace(row, col, dir + 2);
71 } 72 }
72 else if ( chr == '-' && (dir == DIR_UP || dir == DIR_DOWN) ) { 73 else if ( (chr == '/' && (dir == DIR_LEFT || dir == DIR_RIGHT)) ||
73 dir = (dir + 1) % 4; 74 (chr == '\\' && (dir == DIR_UP || dir == DIR_DOWN)) ) {
74 positions.emplace(row, col, (dir + 2) % 4); 75 dir = dir + 3;
75 } 76 }
76 else if ( chr == '/' && (dir == DIR_LEFT || dir == DIR_RIGHT) ) { 77 else if ( (chr == '\\' && (dir == DIR_LEFT || dir == DIR_RIGHT)) ||
77 dir = (dir + 3) % 4; 78 (chr == '/' && (dir == DIR_UP || dir == DIR_DOWN)) ) {
78 } 79 dir = dir + 1;
79 else if ( chr == '/' && (dir == DIR_UP || dir == DIR_DOWN) ) {
80 dir = (dir + 1) % 4;
81 }
82 else if ( chr == '\\' && (dir == DIR_LEFT || dir == DIR_RIGHT) ) {
83 dir = (dir + 1) % 4;
84 }
85 else if ( chr == '\\' && (dir == DIR_UP || dir == DIR_DOWN) ) {
86 dir = (dir + 3) % 4;
87 } 80 }
81
82 dir %= 4;
88 } 83 }
89 } 84 }
90 85
91 set<tuple<size_t, size_t>> foo; 86 set<tuple<size_t, size_t>> foo;
92 for (const auto& bar: visited) { 87 for ( const auto& bar: visited ) {
93 foo.emplace(get<0>(bar.first), get<1>(bar.first)); 88 foo.emplace(get<0>(bar.first), get<1>(bar.first));
94 } 89 }
95 return foo.size(); 90 return foo.size();