solve day 6
This commit is contained in:
parent
aae7ebead9
commit
125eb4d1e6
3 changed files with 364 additions and 0 deletions
10
06/example
Normal file
10
06/example
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
130
06/input
Normal file
130
06/input
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
........#........................................#......#........#................................................................
|
||||||
|
....................................#......#.....#............#.............#..........#..........................................
|
||||||
|
......................#.......................................................#...................................................
|
||||||
|
.......#..#..#....#...#...#....#..............#......#.......#...#................#.......#.......................................
|
||||||
|
......................#....##...#.......#....#.......................................#....................#.......................
|
||||||
|
...#............................#........................................#..........................#.....................#.......
|
||||||
|
....................#............#...............#......#.........#...........#...................................................
|
||||||
|
............................#......#...#................#.............#...........................................................
|
||||||
|
.....#..#.........#....................#......................................................#........................#.........#
|
||||||
|
.........#..##.#.........#.............................................#...........#........#....................##...............
|
||||||
|
...............#....#.........................##......#.....................#..............................................#......
|
||||||
|
..................##...................................#...........#........#....#.............#..................#........#.#....
|
||||||
|
....................................#...................#..............................#............#.............................
|
||||||
|
.........#.....#................#..........................................#...................................#..............#...
|
||||||
|
...#....................#...................................#..##...................#.......#......................###.........#..
|
||||||
|
....................#............#....#.##....#.........#......#...#........................#.......................#..........#..
|
||||||
|
..............#...................................................................................#....................#..........
|
||||||
|
.........#................#..............................#............................#...#.................#...............#.....
|
||||||
|
............................................................................................#...#............................#....
|
||||||
|
............#....................#................................#....#...............................#....#.....................
|
||||||
|
........................................#.........#..................................................#..#..................#......
|
||||||
|
.............#.#............................#..#.....#............................................#....#..........................
|
||||||
|
................................................................................................#.........#..#..............#..#..
|
||||||
|
...........#..........#.#..#................#.#..#...#.........#..........................................#..........#..#.........
|
||||||
|
.............................#....................#.......#....#.....#....#......#....................#..#...............##.......
|
||||||
|
..........#..............................................................................#....#.........#..#................#.....
|
||||||
|
..#..#...............................................................#.......#........#...........................#...............
|
||||||
|
...........................................................................#...##....................#.#....##....................
|
||||||
|
.......................................#...............................................#.....................#.........#..........
|
||||||
|
.......................................................#.......#....#................#.....................................#......
|
||||||
|
.............#................#...................#.................#....................#..................#.#.........#.........
|
||||||
|
.....................................................................#.....................................#......................
|
||||||
|
........................#..........................................#....#..#.#..........................................#.........
|
||||||
|
............#.......#..................#.................................................#..............#.......................#.
|
||||||
|
.........................................................#...............#...#....#...........#.................................#.
|
||||||
|
.........................#..........................#..#........................................................#.................
|
||||||
|
...............#....................................#.......#......................................#............#.................
|
||||||
|
.#......................................................................................................#.........................
|
||||||
|
#...#........................................................#.................#....#....................#...........#............
|
||||||
|
..#.........#................................................................#................................#.............#.....
|
||||||
|
..................................#.........................................................................#................#....
|
||||||
|
..............#..............................................#........#..................................#........................
|
||||||
|
......#............................................#.................................#............................#...............
|
||||||
|
.......##..#.......................##............#...#...................#.#..........................................##..........
|
||||||
|
.#......#.....................................................................#..#..........................#......#.............#
|
||||||
|
.................#.....................#........##..#.........#........#................#.........................................
|
||||||
|
...........#.....#..........#........#............................................................................................
|
||||||
|
.........................#......#.......................................#..............................#..........................
|
||||||
|
............#............................................................#..............#..............................#..........
|
||||||
|
..................#.........#...........................................................................................#.........
|
||||||
|
#.#..................................#....................#......................#.............#.................................#
|
||||||
|
....#................#.................#...................#...........#......................................#...................
|
||||||
|
................#........................................................................................#....#.#.......#.....##..
|
||||||
|
..........#...#.......................................#........#.......................................#...#......................
|
||||||
|
.......#..##........................#......##.........................#.........#.......#.............................#.....#.....
|
||||||
|
................#...............................................#....#..........#.....#.........#.........#.........#.............
|
||||||
|
...............................#............#....................................#......#......................................#..
|
||||||
|
.#..#..................#............................................#....#............#...............##...#..........#...........
|
||||||
|
....#.............................................................................................................................
|
||||||
|
.............................................................#...........................#..........#.............................
|
||||||
|
.#........#..................#.....#.............#.....................................................#...#........#...........#.
|
||||||
|
.......................#........................................#.....#............................#.#..................#.........
|
||||||
|
................#....#................#.......#............................#.......#.................#............................
|
||||||
|
....#.........#....#........#.....................#........................#............#.........................................
|
||||||
|
.......#.......#.....................................................................##...........#...............................
|
||||||
|
...........#.........................................................#..........#............#....................................
|
||||||
|
..................#.............................#.......................................................................#.........
|
||||||
|
................#.....#........#.....#...#..........#.....................................#.....#........................#........
|
||||||
|
..........................................#.........#...........#.................................................................
|
||||||
|
...#.......................................................................................................#......................
|
||||||
|
....#..............#...........#..................................................#.................#.................#...........
|
||||||
|
.#................#.....#.#.................................................................#.........................#...........
|
||||||
|
............#.........................##....................................#..............#......................................
|
||||||
|
...##...........#...#............#..........................................................................#.....................
|
||||||
|
............................................#......................#......#.......................................................
|
||||||
|
............#............................................................................................................#........
|
||||||
|
...................##..............#.#....#.##...................................................#..................#.............
|
||||||
|
..#...................................................................................#.........#.........................#.....#.
|
||||||
|
........................#..............................................#......#................................................#..
|
||||||
|
................#............#............................#.#...................#.....................#...........................
|
||||||
|
..................#......#................#.#......................#...................#...#......................................
|
||||||
|
..#................................................##...................................................................#.........
|
||||||
|
...........................#......................................................................#......#...#......#.............
|
||||||
|
........................#...#........#......#.......#..........#.............................#........#.....#.....................
|
||||||
|
.................................................#..............................................#......#.....#....................
|
||||||
|
.....#....#.................#......#........#.#..............^...........................#...................#..#.................
|
||||||
|
.............................................................................#................................#...................
|
||||||
|
#..........................#..#..............#.......#..........................#.................................................
|
||||||
|
............#.............................................................................#...................#...................
|
||||||
|
..................#.............................#.........................................#................#.........#......#.....
|
||||||
|
...#...............................#.....#......#............###.#.#.....................................#....#.............#.....
|
||||||
|
...........#...........#...........................#..............................................................................
|
||||||
|
............#..........................................#.....#.............#..........................#....................#.....#
|
||||||
|
........................#......#..#............................#.......................................................#..........
|
||||||
|
..#...#...#.......#.#..........................................#.............#.........#....#..................#...........#......
|
||||||
|
..................#.......#.....................................................................................#........#........
|
||||||
|
......##................#...........................................#..............##.................................#...........
|
||||||
|
.................#................................................................................#.#....................#........
|
||||||
|
....................#.........#..........#...............#...#...#.#.#............................................................
|
||||||
|
#..................#.#..........#..#...................................................................................#..........
|
||||||
|
..........#........................................................#..........##..........................#..##...................
|
||||||
|
...........#...................................................................#..................................................
|
||||||
|
..................#........#............................................#..................#....#.......................#..#......
|
||||||
|
............#...................#......#..........................................................................................
|
||||||
|
...........................#.....##..........#.#..............#......................#.............#.......#...........#..........
|
||||||
|
............#..................................................#.......#.........#.#..................#..............##...........
|
||||||
|
#..................................................#...#......#..#......................#.............#........#............#.....
|
||||||
|
....#..................#..........#.........#.........................................#..................#................#.......
|
||||||
|
...#.................#.............................................................................#....................#.........
|
||||||
|
..........#.................................................................#............#....................#.#.#.....#.........
|
||||||
|
.....................#......................#...........#........#................................................................
|
||||||
|
.....#.......................................................................#......................#...#......#..................
|
||||||
|
.............##........#.....................#...........##........#............#.....#.....................#...............#.....
|
||||||
|
.....#.........#....#.................#....#...........#.......##..........#.........#.#......................................#...
|
||||||
|
.......#..................##.......#...#.#...#...................................#.......................................#.....#..
|
||||||
|
...............#.......#.................#........................................................................................
|
||||||
|
......#.......#.....#...............................#...........#.......#......................##...#....#........................
|
||||||
|
.##..........................##..................##................#..#....#...##.................................................
|
||||||
|
........#..............................#.#......#........#...............#....#........#.#........................................
|
||||||
|
...............................#..#.....................#.#...................#...................................................
|
||||||
|
.....................#.................................................##...#.......#.................##...............#.......#..
|
||||||
|
.............#..........................#.................................#..............#.......#..........#........#............
|
||||||
|
.........................................#...................#.........................................................#..........
|
||||||
|
...............................#..........#..............................#............#.....#.....................................
|
||||||
|
.............#..........................#....................#................................#...#............#..................
|
||||||
|
....#......#........#.......#......#................................................#...#......................................##.
|
||||||
|
..#...................................#........#.....................................#...#......#.........#..#..........#.........
|
||||||
|
.......#.........#................................................................................................................
|
||||||
|
...........#...............................##.........................................#..#....................#.....#.#.......##..
|
||||||
|
.........................#..#...............#............................#.............#..........................#..............#
|
224
06/main.cc
Normal file
224
06/main.cc
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void parseGrid(const char *path, vector<vector<char>> &grid) {
|
||||||
|
ifstream input(path);
|
||||||
|
|
||||||
|
string line;
|
||||||
|
while (getline(input, line)) {
|
||||||
|
stringstream line_stream;
|
||||||
|
line_stream << line;
|
||||||
|
vector<char> line_vec;
|
||||||
|
|
||||||
|
char c;
|
||||||
|
while (line_stream >> c) {
|
||||||
|
line_vec.push_back(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
grid.push_back(line_vec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void printGrid(vector<vector<char>> grid) {
|
||||||
|
for (int y = 0; y < grid.size(); y++) {
|
||||||
|
for (int x = 0; x < grid[0].size(); x++) {
|
||||||
|
cout << grid[y][x] << " ";
|
||||||
|
}
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// do one move and save new position in x and y
|
||||||
|
// returns false if the guard left the grid.
|
||||||
|
bool move(vector<vector<char>> &grid, int &x_ret, int &y_ret, char &c) {
|
||||||
|
for (int y = 0; y < grid.size(); y++) {
|
||||||
|
for (int x = 0; x < grid[y].size(); x++) {
|
||||||
|
if (grid[y][x] == 'v') {
|
||||||
|
// cout << "down" << endl;
|
||||||
|
if (y == grid.size() - 1) {
|
||||||
|
grid[y][x] = '.';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
c = 'v';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid[y + 1][x] == '#') {
|
||||||
|
grid[y][x] = '<';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
c = 'v';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
grid[y][x] = '.';
|
||||||
|
grid[y + 1][x] = 'v';
|
||||||
|
c = 'v';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
} else if (grid[y][x] == '^') {
|
||||||
|
// cout << "up" << endl;
|
||||||
|
if (y == 0) {
|
||||||
|
grid[y][x] = '.';
|
||||||
|
c = '^';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid[y - 1][x] == '#') {
|
||||||
|
grid[y][x] = '>';
|
||||||
|
c = '^';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
grid[y][x] = '.';
|
||||||
|
grid[y - 1][x] = '^';
|
||||||
|
c = '^';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
} else if (grid[y][x] == '>') {
|
||||||
|
// cout << "right" << endl;
|
||||||
|
if (x == grid[y].size() - 1) {
|
||||||
|
grid[y][x] = '.';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
c = '>';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid[y][x + 1] == '#') {
|
||||||
|
grid[y][x] = 'v';
|
||||||
|
c = '>';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
grid[y][x] = '.';
|
||||||
|
grid[y][x + 1] = '>';
|
||||||
|
c = '>';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
} else if (grid[y][x] == '<') {
|
||||||
|
// cout << "left" << endl;
|
||||||
|
if (x == 0) {
|
||||||
|
grid[y][x] = '.';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
c = '<';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grid[y][x - 1] == '#') {
|
||||||
|
grid[y][x] = '^';
|
||||||
|
c = '<';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
grid[y][x] = '.';
|
||||||
|
grid[y][x - 1] = '<';
|
||||||
|
c = '<';
|
||||||
|
x_ret = x;
|
||||||
|
y_ret = y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void part1(const char *path) {
|
||||||
|
vector<vector<char>> grid;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
parseGrid(path, grid);
|
||||||
|
|
||||||
|
set<char, greater<char>> visited[grid.size()][grid[0].size()];
|
||||||
|
// initialize vector
|
||||||
|
for (int y = 0; y < grid.size(); y++) {
|
||||||
|
for (int x = 0; x < grid[0].size(); x++) {
|
||||||
|
set<char, greater<char>> s;
|
||||||
|
visited[y][x] = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int sum = 0;
|
||||||
|
while (move(grid, x, y, c)) {
|
||||||
|
if (!visited[y][x].size()) {
|
||||||
|
sum++;
|
||||||
|
visited[y][x].insert(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << path << "1: " << sum << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool has_loop(vector<vector<char>> grid) {
|
||||||
|
// printGrid(grid);
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
char c;
|
||||||
|
set<char, greater<char>> visited[grid.size()][grid[0].size()];
|
||||||
|
// initialize vector
|
||||||
|
for (int y = 0; y < grid.size(); y++) {
|
||||||
|
for (int x = 0; x < grid[0].size(); x++) {
|
||||||
|
set<char, greater<char>> s;
|
||||||
|
visited[y][x] = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (move(grid, x, y, c)) {
|
||||||
|
// cout << endl;
|
||||||
|
// printGrid(grid);
|
||||||
|
if (visited[y][x].count(c)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
visited[y][x].insert(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void part2(const char *path) {
|
||||||
|
vector<vector<char>> grid;
|
||||||
|
parseGrid(path, grid);
|
||||||
|
|
||||||
|
int sum = 0;
|
||||||
|
for (int y = 0; y < grid.size(); y++) {
|
||||||
|
for (int x = 0; x < grid[0].size(); x++) {
|
||||||
|
// cout << "x= " << x << " y= " << y << endl;
|
||||||
|
if (grid[y][x] == '.') {
|
||||||
|
grid[y][x] = '#';
|
||||||
|
// cout << "before has_loop" << endl;
|
||||||
|
if (has_loop(grid)) sum++;
|
||||||
|
// cout << "after has_loop" << sum << endl;
|
||||||
|
grid[y][x] = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << path << "2: " << sum << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
part1("example");
|
||||||
|
part1("input");
|
||||||
|
part2("example");
|
||||||
|
part2("input");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue