mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Part 18 not working
This commit is contained in:
81
2019/inputs/18.txt
Normal file
81
2019/inputs/18.txt
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#################################################################################
|
||||||
|
#.....#y....#.........#...#.#.....#.....#.......................#.......#.......#
|
||||||
|
#.###.#.#####.#####.#.#.#.#.#.#.#.#.#.#########.###############.#######.#.#####.#
|
||||||
|
#...#q#...#.......#.#.#.#.#...#.#.#.#...#...#...#......w#.....#.#.....#.#.#...#.#
|
||||||
|
###.#.###.#.#######.#.#F#.#####.#.#.###.#.#.#.#.#.#####.#.###.#.#.###.#.#.#.#.#.#
|
||||||
|
#...#.....#.#.#a....#.#.#.......#.#...#.#.#...#.#.#..v#...#...#...#...#.....#.#.#
|
||||||
|
#.#######.#.#.#.#####.#.#########.#####.#.#######.#.#######.#######.###########.#
|
||||||
|
#.#...#...#...#...#...#.#.....#...#...#.#.#.......#.....#..b#c..#...#.........#.#
|
||||||
|
#.#.#.#######.###.#.###.#.###.#.###.#.#.#.#.#######.###.#.###.#.#.###.#.#####.#.#
|
||||||
|
#.#.#.#o......#...#.....#...#.#.....#.#.#.#.....#...#...#...#.#.#.#...#...#.#...#
|
||||||
|
#.#.#.#.#######.###########.#.#######.#.#.#####.#####.#.###.#.#.#.#####.#.#.###.#
|
||||||
|
#.#.#...#.....#.....#.....#.#.....#.....#.....#...#...#...#...#.#.....#.#.#...#.#
|
||||||
|
#.#.#####E###.#####.#.#.#.#.#####.#########.#.###D#.#.#########.#####.###.#.###.#
|
||||||
|
#...#.....#.#.#...#...#.#.#.....#...#...#...#...#...#.#...#.....#...#.....#.....#
|
||||||
|
#.###.#####.#.#.#.#####.#####.#####.#.#.#.#####.#####.#.#.#.#######.#######.#####
|
||||||
|
#.....#.....#.#.#...#.#.#...#.#...#...#.#.#.........#.#.#...#...........#...#...#
|
||||||
|
#######.###.#.###.#.#.#.#.#.#.#.#.#####.#.###########.#.#####.#.#########.#####.#
|
||||||
|
#.........#.#.....#.#.#...#.#.#.#.#...#.#...#...#.....#...#...#.#.......#.#..h..#
|
||||||
|
#.#######.#########.#.#####.#.#.#.#.#.#.#.#.#.#.#.#######.#.#####.#####.#.#.###.#
|
||||||
|
#.....#.#...#...#.........#...#.#.#.#.#.#.#...#.....#.....#.....#.....#.#...#.#.#
|
||||||
|
#####.#.###.#.#.#.#########.###.#.#.#.#.#############.#.#######.#####.#.#####.#.#
|
||||||
|
#.#...#...#...#...#.#.#...#...#.#.#.#...#.L...........#.#.....#.......#.......#.#
|
||||||
|
#.#.###.#.#########.#.#.#.#####.#.#.#####.###.###########.#############.#.#####U#
|
||||||
|
#l#.#.#.#...#.......#.#.#.......#.#.....#.#...#.....P...#.M........m#...#.#...#.#
|
||||||
|
#.#.#.#.#.###.###.###.#.#########.#.###.#.#####.#######.###########.#.#####.#.#.#
|
||||||
|
#.#.#...#.....#...#...#...#.....#.#...#.#...#...#.#.J.#....j......#.#.#.....#.#.#
|
||||||
|
#.#.###########.#.#.###.#.###.###.#####.###.#.###.#.#.#####.#.#####.#.#.#####.#.#
|
||||||
|
#.#.............#.#.#...#...#.#...#.....#...#.#...#t#.......#.#.....#.#...#.#...#
|
||||||
|
#Z###############.#.#.#####.#.#.###.###.#.#.#.###.#.#########.#K#####.###.#.#####
|
||||||
|
#.............#...#.#.....#.#.#...#.#...#n#.#p..#.#.#.........#.#.........#.....#
|
||||||
|
#.#######.###.#.###.#####.#.#.###.#.#.###.#####N#.#.#####.#####.#.#########.#.#.#
|
||||||
|
#...#.....#...#.#...#.....#.#...#...#...#.......#.#.....#.#...#.#.#...#.....#.#.#
|
||||||
|
#.###C#########.#.#########.#.#.#######.#########.#####.###T#.#.#.#.#.#.#####.#.#
|
||||||
|
#.#...#.........#.#.....#...#.#...#.....#.....#.......#.....#k..#.#.#...#.....#.#
|
||||||
|
###.###.#########.#.###.#.#####.#.#.#######.#.#.#################.###.###.#####.#
|
||||||
|
#...#.B.#...#...#.#...#.#.#.....#.#.#...#...#...#...............#...#.#...#.#...#
|
||||||
|
#.###.###.#.#.#.#.###.#.#.#.#.###.#.###.#.#######.#########.###.###.#.#.###.#.###
|
||||||
|
#...#.#...#.#.#.#...#.#...#.#...#.#.#...#.#.....#.......#.#.#...#...#.#.#.....#.#
|
||||||
|
#.#.#.#.###.###.###.#.#####.###.###.#.#.#.#.###.#######G#.#.#####.#####.#.#####.#
|
||||||
|
#.#.....#.........#...#.......#.......#.......#...........#.............#.......#
|
||||||
|
#######################################.@.#######################################
|
||||||
|
#.......H.#.......#.....#.....#.....#.................#...................#.....#
|
||||||
|
#######.###.#####.#.#.###.#.#.###.#.###.#.#########.###.#######.#########.#.#####
|
||||||
|
#.....#.#...#...#...#..x..#.#.#...#...#.#.#.......#...........#.#.......#.#.#...#
|
||||||
|
#.###.#.#.###.#############.#.#.#####.#.#.#.#####.###########.#.#.#####X#.#.#.#.#
|
||||||
|
#.#.#.#.#...#...#.....#.....#...#...#...#.#.#.#...#...#...#...#...#.....#.#.#.#.#
|
||||||
|
#.#.#.#.###.#.#.#.###.#.###########.###.###.#.#.###.#.###.#.#######.#####.#.#.#.#
|
||||||
|
#.#.......#.#.#...#...#.#...#.......#...#...#.......#...#.....#...#.#.....#...#.#
|
||||||
|
#.#.#######.#.#####.###.###.#.###.###.###.#############.#####.#.#.#.#####.#####.#
|
||||||
|
#u#...#.....#...#...#...#...#.#...#...#.#.........#.....#...#.#.#...#...#.#...I.#
|
||||||
|
#.#.###.#########.#.#.###.###.#.###.###.#####.###.#####.#.#.#.#.#####.#.#.#.###.#
|
||||||
|
#.#.#.............#.#.#s..#...#...#g..#.#...#...#.#...#...#.#.#.......#.#...#.#.#
|
||||||
|
#.###.###############.#.###.#####.###.#.#.#.#####.#.#.#####.#########.#.#####.#.#
|
||||||
|
#...#.#.#.......#..i..#.........#...#.#.#.#.....#...#.....#.........#.#.#.#.....#
|
||||||
|
#.#.#.#.#.#####.#.#####.#########.#.#.#.#.#####.#########.#########.###.#.#.#####
|
||||||
|
#.#...#.#.#...#.#...#.......#.....#.#.#.#.....#.#z......#.......#.#.....#.#...#.#
|
||||||
|
#.#####.#.#.#.#.#.#.#######.#.#####.#.#.#.#####.#.#####.#.#####.#.#######.###.#.#
|
||||||
|
#.....#r#...#.#.#.#.....#.#.#...#...#.#.#.#.....#.#...#.#.....#.#.........#.#...#
|
||||||
|
#####.#.#####.#.#######.#.#.###.#####.#.#.#.#####.###.#.#######.###.#####.#.###.#
|
||||||
|
#.....#.....#.#.......#.#.#.#.#.........#.#.#...#.....#.......#...#.....#.....#.#
|
||||||
|
#.#####.#####.#######.#.#.#.#.#########.#.#.#.#.#####.#######.#.#.#.###.###.###.#
|
||||||
|
#.#.....#...#.#.....#.#.#.....#.......#.#.#.V.#.....#.....#.#.#.#.#...#...#.#.S.#
|
||||||
|
#.###.###.#.#.#.#######.#####.#.#####.###.#####.###.#####.#.#####.#######.#.#.###
|
||||||
|
#...#.#...#...#.......#...#...#.....#...#.#.#...#...#.#...#.......#.....#.#.#.#.#
|
||||||
|
###.#.#.###########.#.###.#######.#####.#.#.#.#####.#.#.###.#.#####.###.#.#.#.#.#
|
||||||
|
#.#.#.#.#...........#...#.......#.#.....#...#.#...#...#.#...#.#.....#f....#.#.#.#
|
||||||
|
#.#.#.#.#.###.#########.#####.###.#.###.###.#W#.#.###.#.###.#.#.###########O#.#.#
|
||||||
|
#.#...#.#...#.#.......#...#...#...#.#...#.#.#...#...#.#...#.#.#.........R.#.#...#
|
||||||
|
#.###.#.#####.#.#########.#.###.###.###.#.#.#######.#####.###.#.#########.#.###.#
|
||||||
|
#.#...#.....#.#.........#.#.....#.#...#.#.#.....#.#.......#...#.#.....#...#.#...#
|
||||||
|
#.#.#######.#.#######.#.#.#####.#.###.#.#.#####.#.#########.###.#####.#.###.#.###
|
||||||
|
#.#.#...#...#.#.....#.#.#.....#.#...#.#.#.#...#...#.......#...#.......#.#...#.#.#
|
||||||
|
#.#.#.#.#.###.#.###.#.#.#####.#.###.#.#.#.#.#.###.###.#.#.#.#.#######A#.#####.#.#
|
||||||
|
#...#.#.#.....#.#.#.#.#.#...#.#.....#.#.#...#.Y.#...#.#.#.#.#.#.......#.....#.#.#
|
||||||
|
#.#####.#######.#.#.#.#.#.#.#.#######.###.#####.###.###.###.#.#.###########.#.#.#
|
||||||
|
#.........#.....#...#.#.#.#.#.#.....#...#d#.#.....#...#.#...#.#.#...#.....#.#...#
|
||||||
|
#########.###.#.###.#.#.###.#.#.###.###.#.#.#.#######.#.#.###.#.#.#.#.#.###.###.#
|
||||||
|
#.#.....#...#.#...#...#...#.#...#.#...#.#...#...#...#.#.....#.#...#...#.#...#...#
|
||||||
|
#.#.#.#####.#####.#######.#.#####.###.#.###.###.#.#.#.#######.#########.#.###.###
|
||||||
|
#...#.............#................e#...#.....#.Q.#...........#.........#.......#
|
||||||
|
#################################################################################
|
||||||
@@ -1,7 +1,110 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <queue>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <map>
|
||||||
|
#include <numeric>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cctype>
|
||||||
#include "days.hpp"
|
#include "days.hpp"
|
||||||
|
#include "point.hpp"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
typedef std::tuple<int, int, std::string> state_t;
|
||||||
|
|
||||||
|
std::vector<std::string> read_map(std::istream &input) {
|
||||||
|
std::string buffer;
|
||||||
|
std::vector<std::string> map;
|
||||||
|
|
||||||
|
while (std::getline(input, buffer)) {
|
||||||
|
map.push_back(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<int, int> find(const std::vector<std::string> &map, char needle) {
|
||||||
|
for (int y = 0; y < map.size(); ++y) {
|
||||||
|
auto x = map[y].find(needle);
|
||||||
|
if (x != std::string::npos) {
|
||||||
|
return {(int) x, y};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw std::invalid_argument("Can't find it!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void aoc2019::day18_part1(std::istream &input, std::ostream &output) {
|
void aoc2019::day18_part1(std::istream &input, std::ostream &output) {
|
||||||
|
const auto map = read_map(input);
|
||||||
|
|
||||||
|
std::priority_queue<std::pair<int, state_t>, std::vector<std::pair<int, state_t>>, std::greater<>> todo;
|
||||||
|
std::map<state_t, int> visited;
|
||||||
|
|
||||||
|
const auto initial = find(map, '@');
|
||||||
|
const state_t initial_state(initial.first, initial.second, "");
|
||||||
|
visited[initial_state] = 0;
|
||||||
|
todo.emplace(0, initial_state);
|
||||||
|
|
||||||
|
int keys_needed = 0;
|
||||||
|
for (auto &row : map) {
|
||||||
|
keys_needed += std::count_if(row.begin(), row.end(), isalpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't count keys and locks double
|
||||||
|
keys_needed /= 2;
|
||||||
|
|
||||||
|
while (!todo.empty()) {
|
||||||
|
const auto[dist, state] = todo.top();
|
||||||
|
todo.pop();
|
||||||
|
|
||||||
|
const auto[x, y, keys] = state;
|
||||||
|
|
||||||
|
if (keys.size() == keys_needed) {
|
||||||
|
output << dist << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::array<std::pair<int, int>, 4> next_points = {{
|
||||||
|
{x - 1, y},
|
||||||
|
{x + 1, y},
|
||||||
|
{x, y - 1},
|
||||||
|
{x, y + 1}
|
||||||
|
}};
|
||||||
|
|
||||||
|
for (auto point : next_points) {
|
||||||
|
const auto [nx, ny] = point;
|
||||||
|
auto next_keys = keys;
|
||||||
|
|
||||||
|
if (x < 0 || y < 0 || x >= map[0].size() || y >= map.size()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
char at_next = map[x][y];
|
||||||
|
|
||||||
|
if (at_next == '#') {
|
||||||
|
continue;
|
||||||
|
} else if (std::isupper(at_next)) {
|
||||||
|
// check if we have the key already
|
||||||
|
if (keys.find(at_next) == std::string::npos) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (std::islower(at_next)) {
|
||||||
|
if (keys.find(std::toupper(at_next)) == std::string::npos) {
|
||||||
|
next_keys += std::toupper(at_next);
|
||||||
|
// Ensure unique representation
|
||||||
|
std::sort(next_keys.begin(), next_keys.end());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
state_t next_state{nx, ny, std::move(next_keys)};
|
||||||
|
if (auto it = visited.find(next_state); it == visited.end() || it->second < dist + 1) {
|
||||||
|
visited[next_state] = dist + 1;
|
||||||
|
todo.emplace(dist + 1, std::move(next_state));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
output << "Not implemented\n";
|
output << "Not implemented\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user