20
This commit is contained in:
parent
b6f3a500c2
commit
7e5b3cf6cf
22
20/CMakeLists.txt
Normal file
22
20/CMakeLists.txt
Normal file
@ -0,0 +1,22 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
enable_language(CXX)
|
||||
|
||||
project(AoC20)
|
||||
|
||||
if(APPLE)
|
||||
include_directories(/usr/local/include)
|
||||
link_directories(/usr/local/lib)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
add_executable(${CMAKE_PROJECT_NAME} WIN32)
|
||||
else()
|
||||
add_executable(${CMAKE_PROJECT_NAME})
|
||||
endif()
|
||||
|
||||
target_sources(${CMAKE_PROJECT_NAME}
|
||||
PRIVATE main.cpp
|
||||
)
|
102
20/input
Normal file
102
20/input
Normal file
@ -0,0 +1,102 @@
|
||||
########..#..#.##.##.#.#..#.#.###.######.##..##.##..#...#....##.##...##.#.#...#.#.##.###.#.##.#.##.#...#.#.###.#.##.#.####.###..#.####.##..#.#####..####.#.#.#....##.#.#.##...#.####.#....#.##..##...#...#.##..#...#.#..#..#.#.#..##..#.##.##..##...#..###...##..#..###.###.##..#..#####...#.#..###..##....##...#####.#####...##.#.##.#....#.##.#.###.#.##.#.##...######.#...##.#..#.#.#...###.#..#.##.####..##.#..#.##.#.##.######.#.....#.#....####.####.###...#....#..###..###.#...#.#.#.##..#..##.#.#..#..###.#.###..#......
|
||||
|
||||
##..##.#.#.###.##...##..#...#..##...##.#.####.##..#.#.##.###.#.#...#.#.....#.#..##.#.########....##.
|
||||
#.#.#.###..###.#..#.#...#..#....#.....#.##.#.#..#####.##.###.#...#...#.#.##.#...##.###..#..##.#.###.
|
||||
.####......#..#..##..#.##..##.#####.##.#...#.#.#.#.#.#.#.####.#....##...#....##..####...####.#.###..
|
||||
##.#....###.###.###..###..##.###..#.#####..#..#.#..#.#..#.####..##.#..#..##...##.##.##.##.##....#.##
|
||||
.#..####..#####.##...#.#.#..###.#.##...#...#..##.##.#.##..#....#.#.#....##.#.....#########.#.###....
|
||||
.######..#....#.#....##...#..#.#######.....#..#....###.##.#.##.#...#.####..####..######..#....#..###
|
||||
..######...#....###.##..#.#.#.####..#...##.###..##.###.#..#.#######...#....####.########.#.##..###..
|
||||
#.#.####...#.#.##.#..#..###.......#.....##.#..#.###.#..#.#.#.#.##.###.#..##..#.#...##..###...#..#..#
|
||||
#####.#####...#.....##......#...###..###..#.#.#.####.##.#.##...#.#.##.#.###.....#........###....#...
|
||||
.#..###.#...#.###...#.##..#.##...#####.####.##.#.#.###..##.##....#..#...#..#..##.#.#.#.#.....##.#..#
|
||||
..#.####.#...###...###..#..#.#...##.#.###..##.#.##.##.###..#.###.#.##.....#.#.#...###.##...####.##..
|
||||
###.....#.###..###.#.###...#.#.##..#..##.###.#.#####.###.##.#######.#.#.#####.#.#.#.....#......##...
|
||||
###.#.#.....#.#.#..#..###.###..#.#....#####.###.##..#.##..#..##.#.##...##.##..##.#....##.#####.....#
|
||||
###...######.#.##.#.#..####..##.#.#.#..#.#.##..####..#.#####..#..#..#####.#....#.##.##..##...###.###
|
||||
#...###.....#..#..###.....######.#.#.###.#.#####..###.#..#..#..#.#.#..####.#####.#....##.#....##..##
|
||||
.##..###..###....#......#.###...##......#.#..##.#..#######.##.########.#...#.###..##.##.#....#...###
|
||||
....##..#..##..###..#.#####..####.###.###.####........###.#..#.##..#......#.##.###.##.######.#.##.##
|
||||
#.##########...###.##.####.....#####..###.....##.##.#..###.##.##.#..##..##....#.###.##.##.######...#
|
||||
##.#..#.#.#...###.####...#..##..##.#.#.#.#....#.#..##.#..##.#.#..#####.#..##.#..###.#.######..###.#.
|
||||
.#.#.##.#...####.##..##.##.#..##.##.##..#....###....#..####.#....###.#...#..##....##.#..######.####.
|
||||
.#...#..#.####.##.#..#.#...##...###.#...##....#...##...#....#..##.###.####..######..##.###.#.....#..
|
||||
#..#...###..#..#####.#....#..####.#.###..###.####...#...#.#..#...###.#.######.#.#..#.###....####..##
|
||||
#.##.##.##..##..#.#..##...##.....#####.#.#..#.#.#.#.#.#.####..##....#####.#...###..#.#..#....##...##
|
||||
###..#..#.###.##.##.#######.#..##.#..#.#.###..#.#.##..#.##..#..#.#.##.####..#.#####.#.##.#..###.###.
|
||||
#.##.........###.##...####..#.#..###.###...#....#....#.#.#....#.##.#.....##...##........######.##...
|
||||
##.#.#.###.####...###..#.....##.##...##.##..###..###..###..#.#..#..##.#########.#####..#####.#####.#
|
||||
....#..##....#....#....#.###.#.......#..##.#.##..###....#.#####.#.##..#####.#..####.#...##....#.#...
|
||||
.##.##...#..###...#.##..#.###.#...#.#..#.#.#..#.#..#.###.#..###..#.#.#####..#########..#####.##.#.#.
|
||||
###..##..#.#..###.#.###.#.#..##.#.....###.#...#....#...#.#.#..##..##..##.#..#.#.####..##...#.#..#.#.
|
||||
#..#.####.###..#....#########..#..#.#.####..#.#.....#.##......####..####....#.#..#......#...##.###.#
|
||||
....##...#...####...#.#.###..####..####..##.###.##.#.##.###.#####.#.#...#......##.#..###..#....###..
|
||||
.##.##..##.###........##..#.###..#.#.#..##......#.......#.#.#........#..#.##..####.####....#####..#.
|
||||
..##.#.#......#...##..#..###..#..#..#...###.#.####.#.#.##..#.#.#.#.##..#....######.##.#.#...#.##....
|
||||
....##..#..#..##.....#.#.#...####....#...##..#.#.#...#..###...#...#.#.....#####..###.##.#........##.
|
||||
##.#......#.#..####...###.....#......#.#.###.###..##.#.#....##.##.....#.#.......##..#...#.#..##....#
|
||||
#..##.....#####..#.....#.###..#.#..#.#...###.#.####...####.#.##.####..###.#.#..####.#....#.##.#.##..
|
||||
.#.#.####.##..#.##.#..###.#.###..####.#.#..#.#.##...##...#...#.###..##..#...#........##.#.##..#..###
|
||||
....#...#..###.#....#..##.....##.####...####.##..#.#.#.###...#..####.###..##...###.#.#.##....#......
|
||||
##....##.##..#.......##.#...#..#.####...#..##.#.###.#.#....####.####.##.###.##.#..##..#.#.###.#..#.#
|
||||
#...#....#.####.##....#...##.##.#..##.#...######...#.#.#..#.#.#..#.#.###.###..#.#.#.#.##.#...#.#....
|
||||
......#...##.###..##.#####..#..#..#...##.####.##...#.###...#.##...###.############..##..###.###.##.#
|
||||
..#..##.....##..#.##.#.#....#.....##.....#.#..##...##..#.#...#..#..........####..#.####.#.#.....###.
|
||||
.#..#..#########.#.#.#.###..###.#.##.#.#...#......######..#.#.###.##.#...#.##.###..#.#.#..#...#.#.#.
|
||||
.#..#.#.#.#.#..######.#.....#.####....#..#.#..###.#..##.#.#...#.###...#....###...#.#...#.##...#..##.
|
||||
#.##.##.#..#######.##..#...#.###............###.#..##.###.###....####.#..#####...###..#.####....##.#
|
||||
...###.#...##..#.#########..#.###.##...#...##.##...#........###..######..##....#.....####.##....###.
|
||||
.#..#..##...#######.#.##...#.#......#.##.#..#.#...##..######.#####..#..#..#...#..#........#.##.##..#
|
||||
#.#..####.#.#.###...#...#.#.#.#..#.##....###...#.#...##...##.#####.#.#.#.##.##..####.#.##.##.##.....
|
||||
####.###..........#.#.##.#..###.#..#....#.##.#.##.###.######......#.##...#..#..#..###..##.########.#
|
||||
##...##.#.###..#...#.###......#######......#.#.###..#.##..####.#.####..#.#....#.#.#.##..#..###..#.#.
|
||||
#.###.##..##.#.......###...##.##.###.##.####.##..###..##.#.###.#...#...#.#...##..##..#....#.#.#..###
|
||||
.###..##...#....##...#...#.###..#.#####.##..####.##..###.##.#...##.##..########..#.#.##..#.#.#.....#
|
||||
###.....#...#...#....###..#...#....#.#....#...#...##.#...##.#...##...#...#..#.#.##...#.###....##.##.
|
||||
.#.##.###...#..###.##....##..##..#.#.##..#.#..###..#.##...#..##...##..#...#....#..#..####..#...#..#.
|
||||
#..#.#.#..##.#.##.#..####.##..#....#.#.#.#.##...#.#.#...#.#.#.#.#.##.##....#####.#.###.###..#.####..
|
||||
.#.#....#####..#.#.###.#....#.#.#.##..##.##....##..#..#..#....####..#.###.....#..###.#.##.#.#.##.#.#
|
||||
#..#..###..#...###...##.#.#.##....#..#.#.#.###...#....#...##..###.##.#.##..####.######..#.####..####
|
||||
##.##.###.###.#.###.#..#.###.....#..##.#..###.####.#.#.##.#..#.#...#....#.###.#####.##.#.#.##....###
|
||||
...#.#.###..#..#.#.#..###...#.#..###.#.####..#..##.##..#.##.###...##.##..#.##.####.##..##..##.###..#
|
||||
##.#...#..#.##..#####..#....##....####....###.##......#..#..#.##.######.##....#.#.###...#.###.....#.
|
||||
###.######.#...##...##.#...##..#.#....#......#..#.#.#.####.#######..#...#...##.#.#.#.#.##.#.#..#..##
|
||||
....####...##.#...#.###..#.......#####.#.#.#.##.#.##..#....######.##..#..#..#....#.#.#.#..#..#.##..#
|
||||
#..##.#....#.##.##..#.#..#.##.##.#..#.##.#...##..###..###.#.##########.....##.#...##..##.##....#.###
|
||||
###.#..#.###.##..#.#.#..#..#..#...##.#.#..#..#..###..#.#.#..###..##.#...##.#.....#.#####..##.#.###.#
|
||||
...#.#.#..#.#...##..###...#.##.#.#.#....##..#####.#.##.####..##.##.#.##...###..#####..#...#.#...#...
|
||||
..##.###....#...#####.#..#...#.##...####.##...##...#####......#####.....#..#..####.###.###..##..###.
|
||||
#####.##.#.#.#.###.##.#.....#..##..#..##.#..#..#..#.##..#..#.#..#...#.###..#..####....#.###..##.#.#.
|
||||
#.#.##.#...##.#.####....#....#...#.#..##....#.##....##..#..#.#.##.#.##.#.###..####.#######.#...#.#..
|
||||
#####..#.##.....####..#..#.####.##..##.#....#..#..#......#.###..#......#...##.....#..###.#.#...##.#.
|
||||
#.#.#######.###....###...#.#...#...###.#...#.######..#.######..###...##....#..##..##.##..#.#.##..#.#
|
||||
.##....#..##..###....##.###....####...#..#.#..###...##.#.##...#....#...#.#.###..#....#.###...##....#
|
||||
..##..#.....##..##....#..###.##.#...######.#...#.#.#.##...#...#.##.#.....##.###.###..#.###..##..##..
|
||||
##...##.#.#..##.#.#.##.###.#.##...#......#.#..#.####.###.#....#...#..###.#.#..#.##.#.####....##.##..
|
||||
#.#.....#...#..#####....#.....#.#.#.....##.##.#########.#..#..##..#...#..###...##..#..##.....#.#.#..
|
||||
#......#..##..#.###..##.#..#.#.###.#....#...#......##.....###..#..###.........#.##.#.##.##.#...#..#.
|
||||
#.#.##....##.#.###.####.##...####....#####.##.#....#.#.#.#.#..#.#...#.....########.##.#.#..#....#.#.
|
||||
.#..##.#...##.#.######.#.#.##..####...#..#..##.###..####.##.#.#...##.#...##.###..##...####.#...##...
|
||||
.###.#..#.##..#.##.##.#.#..######..#....#.###.#..######.#..#...####.........#.#.##.###.##.#.#.#.###.
|
||||
..#...###.####....###.######.##.#...##.#...###..#########....#.#..##..##...#...#..##.##.#########..#
|
||||
.#..#...##..#..##.#.#..#.#.......##..##.#.#..#..#.....#...##.#.###..#.#.#...###.#####.##.##.#...##..
|
||||
#....#.#.......##.#####......###.##....#...#.......###....#.####..##.##.#.#.#.#..####.#...#....#..#.
|
||||
.........#.###.#.#####.#...#.#.#.###....###..#.###...##..#....##.#.###.#.##.#.#.##..#.#.###.#.#.##.#
|
||||
.##.######.#..#.###.#...#######.#.##.##....###.#####..###.#...###.#..###.#.#.##.#..#.#.#..#..##..###
|
||||
#....#..###..#.....#..####.#.##....####.#.###......###..##.##..#..#.#..#.#.######.#..#.##..##.###..#
|
||||
..#.#..#.#.##.#..##.#.#.##.##..#.#.#...#.##.##.#.#.####.###.###..######..#..#..##.#..###..#.##...###
|
||||
.......#..####....#..###..####.#..##..#..#.....#.##.##.#..##.#.##...#.###......#.#..#..#.##.#.#.#..#
|
||||
..#..#.#..##########...##..#..##.##...#...#..#.##..###..#.#...##.##.#####..#....###...##.#.#..#..##.
|
||||
#.###..#..#..#.#.##.#####.#.....#....##.#.#...#.##...####.##....##..###..#.##.##..#...##...##...####
|
||||
#####..#..#....####.##..#.#######..#....#########...##....#....#..#.#.##...########..#.#...##..##...
|
||||
######.##.##.#.##########.####.#.#.#...##.##..#.#..##..#.##.....#.###...###...#.#.#.##.....###.##..#
|
||||
..###....#..##...#.#...##..#..####.#.#.####.#.#......##.#..###.######.#.#....##.##...##.##..#.##.###
|
||||
##..####..####.#####....#..##.#.#####.#..###..####.#......##.###....#...#..#....#..#.####.####...###
|
||||
..#..###.#.##..#.#...#.##..#.#########..#..###..#..####.#....#.#..###...#.#..#.....#..###.####..###.
|
||||
.##...####..#.###..#.#..#.##.#...####...#.#.#.........##..#.....#.##......#####.#.###..#####.###.#..
|
||||
###.##.##.#..#..##.####...###.#.#...#######.###.#..###.#.##.#...##..##..#...#...####.#.###....#..#..
|
||||
..###...###..#.....#..##.##.#.#..#..#.######.#....#.##..#.#.####...#..##.#....#...###.###.##.#..#.##
|
||||
..#....###.#.#.#.#...#...#...##.#...#...###..#.###..##.#.....#.####...#.##.####.#....###.#..#...#.##
|
||||
####..#...#.####...#####.#####....###.#.....##..#...##..#.#.####..#######.#.###..###..##.###...#.###
|
||||
######.##.######..#.##.#.#..#...######.#.##.....####.###.#..#.#..##....#...##..#.#.##..#....#......#
|
||||
.#.##..##.###.#..##.#...####..##...##..#.#.####.##..#.######....#####..##.#.#####...#.#...#.###.....
|
147
20/main.cpp
Normal file
147
20/main.cpp
Normal file
@ -0,0 +1,147 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <array>
|
||||
|
||||
class Image {
|
||||
public:
|
||||
Image(size_t width, size_t height) {
|
||||
image.resize(height);
|
||||
for(auto &x : image) {
|
||||
x.resize(width);
|
||||
}
|
||||
}
|
||||
Image(const std::vector<std::vector<bool>> &input) : image(std::move(input)) {}
|
||||
|
||||
void setPixel(size_t x, size_t y, bool pixel) {
|
||||
image[y][x] = pixel;
|
||||
}
|
||||
bool getPixel(size_t x, size_t y) const {
|
||||
return image[y][x];
|
||||
}
|
||||
void setOutsidePixelState(bool pixel) {
|
||||
outside = pixel;
|
||||
}
|
||||
bool getOutsidePixelState() const {
|
||||
return outside;
|
||||
}
|
||||
size_t getImageWidth() const {
|
||||
return image[0].size();
|
||||
}
|
||||
size_t getImageHeight() const {
|
||||
return image.size();
|
||||
}
|
||||
size_t getLitPixels() const {
|
||||
size_t pixels = 0;
|
||||
for(auto &line : image) {
|
||||
for(auto pixel : line) {
|
||||
if(pixel) {
|
||||
pixels++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return pixels;
|
||||
}
|
||||
bool getNewPixel(const std::array<bool, 512> &algorithm, int64_t x, int64_t y) const {
|
||||
uint16_t index = 0;
|
||||
for(int y_add = -1; y_add <= 1; y_add++) {
|
||||
for(int x_add = -1; x_add <= 1; x_add++) {
|
||||
index <<= 1;
|
||||
auto new_y = y + y_add;
|
||||
auto new_x = x + x_add;
|
||||
if(new_y < 0 || new_x < 0 || new_y >= getImageHeight() || new_x >= getImageWidth()) {
|
||||
if(getOutsidePixelState()) {
|
||||
index |= 0b1;
|
||||
}
|
||||
} else {
|
||||
if(getPixel(new_x, new_y)) {
|
||||
index |= 0b1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return algorithm[index];
|
||||
}
|
||||
void printImage() const {
|
||||
for(auto &line : image) {
|
||||
for(auto pixel : line) {
|
||||
std::cout << (pixel ? '#' : '.');
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
private:
|
||||
bool outside = false;
|
||||
std::vector<std::vector<bool>> image;
|
||||
};
|
||||
|
||||
std::pair<std::array<bool, 512>, Image> getInput(const std::string &file_name) {
|
||||
std::ifstream file(file_name);
|
||||
std::array<bool, 512> algorithm{};
|
||||
std::vector<std::vector<bool>> image_data{};
|
||||
int tmp = 0;
|
||||
std::string str;
|
||||
std::getline(file, str);
|
||||
for(size_t i = 0; i < 512; i++) {
|
||||
if(str[i] == '#') {
|
||||
algorithm[i] = true;
|
||||
} else {
|
||||
algorithm[i] = false;
|
||||
}
|
||||
}
|
||||
std::getline(file, str);
|
||||
while (std::getline(file, str)) {
|
||||
image_data.emplace_back();
|
||||
for(auto &c : str) {
|
||||
if(c == '#') {
|
||||
image_data.back().push_back(true);
|
||||
} else {
|
||||
image_data.back().push_back(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
auto image = Image(image_data);
|
||||
return {algorithm, image};
|
||||
}
|
||||
|
||||
Image applyAlgorithm(const std::array<bool, 512> &algorithm, const Image &startingImage) {
|
||||
Image newImage(startingImage.getImageWidth() + 2, startingImage.getImageHeight() + 2);
|
||||
for(int64_t x = 0; x < newImage.getImageWidth(); x++) {
|
||||
for(int64_t y = 0; y < newImage.getImageHeight(); y++) {
|
||||
auto startingX = x - 1;
|
||||
auto startingY = y - 1;
|
||||
auto nextPixel = startingImage.getNewPixel(algorithm, startingX, startingY);
|
||||
newImage.setPixel(x, y, nextPixel);
|
||||
}
|
||||
}
|
||||
newImage.setOutsidePixelState(algorithm[startingImage.getOutsidePixelState() ? 511 : 0]);
|
||||
return newImage;
|
||||
}
|
||||
|
||||
size_t part1(const std::array<bool, 512> &algorithm, Image image) {
|
||||
for(int i = 0; i < 2; i++) {
|
||||
image = applyAlgorithm(algorithm, image);
|
||||
}
|
||||
return image.getLitPixels();
|
||||
}
|
||||
|
||||
size_t part2(const std::array<bool, 512> &algorithm, Image image) {
|
||||
for(int i = 0; i < 50; i++) {
|
||||
image = applyAlgorithm(algorithm, image);
|
||||
}
|
||||
return image.getLitPixels();
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 2) {
|
||||
std::cerr << "You must provide input file!" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
auto input = getInput(argv[1]);
|
||||
std::cout << "There are \033[91;1m" << part1(input.first, input.second)
|
||||
<< "\033[0m lit pixels after 2 applies." << std::endl;
|
||||
std::cout << "There are \033[91;1m" << part2(input.first, input.second)
|
||||
<< "\033[0m window depth increases." << std::endl;
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user