diff options
Diffstat (limited to 'src/day16.cpp')
| -rw-r--r-- | src/day16.cpp | 35 |
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(); |
