Day 6 Part 1.
This commit is contained in:
parent
f0a86a6479
commit
f9c90b42de
2
2024/6/Makefile
Normal file
2
2024/6/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
a.out: main.cpp
|
||||
clang++ -std=c++2b -g -O0 main.cpp
|
130
2024/6/data.txt
Normal file
130
2024/6/data.txt
Normal file
@ -0,0 +1,130 @@
|
||||
.......................#....#....................#....#..##.##.........................................#...........#...........#..
|
||||
.............#........................................#....................#............#.......................#............#....
|
||||
.........#.............#..#....#..........................#.......#.#.......#...............................................##....
|
||||
..........#....#....................................................#....................#...........#....#.......................
|
||||
.............#...#....................#...........#.........#...........................#............#............................
|
||||
..........................................................................................#.....#.......#...................##....
|
||||
...............................................#.#......#..............#...#...................##...........#....#..#...#.........
|
||||
..#.................#......#........#......................#.......#...............................#..............................
|
||||
.........................#...............#.....................................#....#..#..#............................#..........
|
||||
......................#.................................................................#..........#..............#...#......#....
|
||||
............................#.....##..........#.....................#..........#..#.......#.......................................
|
||||
......#...###...........#.................................................................#.......................................
|
||||
......................#.#..#................#..........#................#...........#............#..............#...#.........#...
|
||||
....#.........................#..#...............................................#....#.............#.............................
|
||||
..#............#...#............#..........#...............#.....#....##.........................#........#.......................
|
||||
..................#............#..............#..........................................................#..#..#........#.........
|
||||
.......#...#............#..........................................................#..............................#.............#.
|
||||
..#................#....................#.#...#.................................#.........#....................#.........#........
|
||||
...................................#..#..........................#........#.....#.........................................#.......
|
||||
...........##.................##............#................#...#..................................##...#........................
|
||||
..............#..................#....................................................................#...........................
|
||||
.#...#....#..........##..................................#.............................................................#......#...
|
||||
......#.....#................................#...............................................................#......#.............
|
||||
..........#.............................................#............................##....#.........................#............
|
||||
..........#......#.................#...#........#...........#.#..........#........#....................................#..........
|
||||
.#..................#.#............................#.......................#.........#.......#....................................
|
||||
.....................#....#..................#..................................................##..#................#............
|
||||
......#......................#..#..............##.......#..................................................#..............#.......
|
||||
..........................................................................#........#...#..............#.................#.........
|
||||
....................##....#.......................#........#...................#.............##.......#...........................
|
||||
.........#............#..................................................................................#........................
|
||||
........................................................................#................#........................#.............#.
|
||||
............#.......#.................................#............#..............................................................
|
||||
.#.............#...............................................#....#.........#....#..................................#.#.........
|
||||
.......................................#.....................................................................................#....
|
||||
........#........................................#...............#........................................................#.......
|
||||
...............................#.........#........#...........#.......................................................#.........#.
|
||||
.....................##...#....................................................#............#..................#..#..........##...
|
||||
................#..........#...#............................................................#...##................................
|
||||
...................#........#...............................#.................#.........#.........................................
|
||||
.................................................................................................................#................
|
||||
............................#......................................................#.....................................#......#.
|
||||
......#................#............................#.............................................................................
|
||||
..#...........#.....#.........#....#................#............................................#................................
|
||||
..................................#.......#.......#...........#.........#................#.....................................#.#
|
||||
...............................................#............................................#.#.....................#.......##....
|
||||
..............................#...............#..............................#...#...#.............................#...........#..
|
||||
.......#...........#..........................................................#........#..#.........#.....#.....#...#.............
|
||||
......................................................#.#............#.........#.#...........#........##.....#....................
|
||||
...........................................................................#..........#.........................#.........#.......
|
||||
....#.........................#.....................................................................................#...#......#..
|
||||
...#.......#............................................................#...............................#....................##.#.
|
||||
.................................#.....#................................................................#.........................
|
||||
.....................................#........................#....................................#..............................
|
||||
..............#.......................................................................#.......#....................#..........#...
|
||||
................................#..........................................#.................................#.....#..............
|
||||
...........#.......................................................#...............#.....................#..............#......#..
|
||||
..................................#..........................#.................................................................#..
|
||||
.............##......#....................................................#......#...............................................#
|
||||
#.......#...................#..........#...................#.................#..................................................#.
|
||||
.......#..........#.....##...........#.......................#............#..............................#.............#..........
|
||||
.............#...................##......................................................................................#........
|
||||
#.............................#...................................................................#...............................
|
||||
.#...................................#....##..................................................................................#...
|
||||
.................................#.#..................#..#..#..........................#.......#..................................
|
||||
..................#....#....#....................................................#....................................#........#..
|
||||
..........................................#...#.....#...........#.........#............#............#..........................#..
|
||||
...............................................................................#..............................................#...
|
||||
.............................#......#....................#....#....................................................#.#.#..........
|
||||
................##......#........#........#...........#..........................#......................#..............#..........
|
||||
.....................#.....#..#.............................................................................................#.....
|
||||
.......#..#...........#................................................................#..........................................
|
||||
#.......................................................................................................#...#.....................
|
||||
.#..........................................................#.....................................................#...............
|
||||
#.....#...#...............#..#......#........#..#...................#...................#.................#.......................
|
||||
..#.................................................................................#.#......................#....................
|
||||
.......................#.............#..........#.......................#...................................#.....................
|
||||
.................#......#......#...#.#.#.............................#.......................................................#....
|
||||
..#...........................................................................................................#...................
|
||||
.................................#..................#.....#........#.........................................................#....
|
||||
.............#......................#...............................................#...#.............................#...#....#..
|
||||
.#............................#..........................#.#...........................#..........................#.#.............
|
||||
.............................#.........#.................##............................#...................#......................
|
||||
.........#......#....#.........#..............................................................................................#..#
|
||||
.....................#......#.................#..#..........................#..................#..............................#.#.
|
||||
........................................................#......................#............#.......#......#......................
|
||||
........................................#....##.#........#......#..............................#..........#..........#.##.........
|
||||
.............#.......#.......#......................#..........................................#.........#............#...#...#.#.
|
||||
..................#........................................................#...............................#.....#.....#..........
|
||||
.........#.................#........#..............^..............#.................##......#...................................#.
|
||||
....#...................#.#.................................#...#.................................................#...............
|
||||
.................#.............................................#................#.....#......#.......#...................#........
|
||||
...............#...............................................................................#..#...............#...............
|
||||
........................................##..........................................................................##............
|
||||
............................................#...................#........#...#...#....#.........#...................#.............
|
||||
.....#...#...................#....................................#......#...........#...............#............................
|
||||
........................#..................#.....................#.................................................#......##......
|
||||
...#.................#....................#..................................#.#.........................#.......#................
|
||||
....................#............#..................................#...#......#....................#...............#.............
|
||||
.....#...............#.......###........#............#......................#.......#....#........................................
|
||||
....................#........#...........#..................................#..#................#.............#...................
|
||||
.....#..................#...................#.#..................................#.......#..#.....................................
|
||||
..#..#.......#........................................#.................................................................#.........
|
||||
.......#............#...#....#.......................#.#...................................#.........................#..#.#.......
|
||||
..............#......................................................................................................#............
|
||||
............#....................#........................#.........#...#.........................................................
|
||||
...................................#..............................#.........................................................#.....
|
||||
......##...........#.#........................#.........................................................................#.........
|
||||
..........................#.....................................................#..............................#..............#...
|
||||
.........................#...#.....................#..#................#................................................#....#....
|
||||
...#.................................#...#.......#...............................................................#................
|
||||
..................................#....................................#...........................##..#.#.....................#..
|
||||
.#.............#.....#...............................................................#...............#...............#..#.........
|
||||
.........#.............................#........................#.............#......................#........#............#......
|
||||
...................................#..#...#.....................................#.................................................
|
||||
........................................##..........#..............................................#.....................#........
|
||||
......#...........................................#....#.....................#...................#..#.........#...................
|
||||
.#....#.....#........##..................................#......#................................................#....#..##.......
|
||||
..........#....................................................................##.........................#...........#...........
|
||||
...........#.#......#.......#..................#............#...............................................#...#..............#..
|
||||
.................................................................#.......#.........#.....#........#....##....#..........#.........
|
||||
.............................#......................................................#.....#...#...#....#...........#..........#.#.
|
||||
.....................#........#.........................#......................................#................#...............#.
|
||||
.........................................................................#...................................................#....
|
||||
..............#...#..#................#....................................#.......#....#.#...............#.........#.............
|
||||
.......#......#.#............................................#.......#............................................................
|
||||
##......................................................#..#.................................##...................#..#...........#
|
||||
...........#.#...#........#............#..............................#........................#.........................#..#.....
|
||||
................................................##.........................................#.................#....................
|
||||
............................#....................................................#...#........................#.#......#........#.
|
10
2024/6/data_test.txt
Normal file
10
2024/6/data_test.txt
Normal file
@ -0,0 +1,10 @@
|
||||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
175
2024/6/main.cpp
Normal file
175
2024/6/main.cpp
Normal file
@ -0,0 +1,175 @@
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
|
||||
struct Position {
|
||||
// NOTE(dev): Could do enum empty/reached/blocked, but I'm not interested.
|
||||
bool blocked = false;
|
||||
bool reached = false;
|
||||
};
|
||||
|
||||
enum Direction {
|
||||
UP = 0,
|
||||
RIGHT,
|
||||
DOWN,
|
||||
LEFT
|
||||
};
|
||||
|
||||
struct Player {
|
||||
std::pair<int, int> location;
|
||||
Direction direction = Direction::UP;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
const std::string filename = "data.txt";
|
||||
std::ifstream ifs(filename);
|
||||
if(!ifs.is_open())
|
||||
{
|
||||
std::cerr << "Missing " << filename << "." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned long total = 0;
|
||||
unsigned long total_pt2 = 0;
|
||||
|
||||
std::map<std::pair<int, int>, Position> level;
|
||||
Player player;
|
||||
|
||||
int max_x = 0;
|
||||
int max_y = 0;
|
||||
bool first_row = true;
|
||||
int y = 0;
|
||||
|
||||
auto DebugPrint = [&]()
|
||||
{
|
||||
std::cout << std::endl;
|
||||
for(auto y = 0; y < max_y; ++y)
|
||||
{
|
||||
for(auto x = 0; x < max_x; ++x)
|
||||
{
|
||||
if(player.location.first == x && player.location.second == y)
|
||||
{
|
||||
switch(player.direction)
|
||||
{
|
||||
case Direction::UP:
|
||||
std::cout << "^";
|
||||
break;
|
||||
case Direction::RIGHT:
|
||||
std::cout << ">";
|
||||
break;
|
||||
case Direction::DOWN:
|
||||
std::cout << "v";
|
||||
break;
|
||||
case Direction::LEFT:
|
||||
std::cout << "<";
|
||||
break;
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto &pos = level[{x, y}];
|
||||
if(pos.reached)
|
||||
std::cout << "X";
|
||||
else if(pos.blocked)
|
||||
std::cout << "#";
|
||||
else
|
||||
std::cout << ".";
|
||||
}
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
// Parse Input
|
||||
for(std::string line; std::getline(ifs, line); )
|
||||
{
|
||||
if(line == "")
|
||||
continue;
|
||||
|
||||
int x = 0;
|
||||
for(const char &value : line)
|
||||
{
|
||||
Position pos;
|
||||
if(value == '#')
|
||||
pos.blocked = true;
|
||||
if(value == '^') // always up?
|
||||
{
|
||||
pos.reached = true;
|
||||
player.location = {x, y};
|
||||
}
|
||||
|
||||
level[{x, y}] = pos;
|
||||
|
||||
++x;
|
||||
}
|
||||
if(first_row)
|
||||
{
|
||||
max_x = x;
|
||||
first_row = false;
|
||||
}
|
||||
++y;
|
||||
}
|
||||
max_y = y;
|
||||
|
||||
// DEBUG:
|
||||
DebugPrint();
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
// while(player.location.first >= 0 && player.location.first < max_x &&
|
||||
// player.location.second >= 0 && player.location.second < max_y)
|
||||
while(true)
|
||||
{
|
||||
std::pair<int, int> next_location = player.location;
|
||||
switch(player.direction)
|
||||
{
|
||||
case Direction::UP:
|
||||
--next_location.second;
|
||||
break;
|
||||
case Direction::RIGHT:
|
||||
++next_location.first;
|
||||
break;
|
||||
case Direction::DOWN:
|
||||
++next_location.second;
|
||||
break;
|
||||
case Direction::LEFT:
|
||||
--next_location.first;
|
||||
break;
|
||||
};
|
||||
|
||||
if(!level.contains(next_location))
|
||||
{
|
||||
player.location = next_location;
|
||||
break;
|
||||
}
|
||||
if(level[next_location].blocked)
|
||||
player.direction = static_cast<Direction>(((int(player.direction)) + 1) % 4);
|
||||
else
|
||||
{
|
||||
level[next_location].reached = true;
|
||||
player.location = next_location;
|
||||
// DebugPrint();
|
||||
// usleep(20000);
|
||||
}
|
||||
}
|
||||
|
||||
DebugPrint();
|
||||
|
||||
for(auto y = 0; y < max_y; ++y)
|
||||
for(auto x = 0; x < max_x; ++x)
|
||||
if(level[{x,y}].reached)
|
||||
++total;
|
||||
|
||||
std::cout << std::endl;
|
||||
std::cout << " Total: " << total << std::endl;
|
||||
std::cout << "PT2 Total: " << total_pt2 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user