8
This commit is contained in:
parent
719b822d5b
commit
025363cc0c
|
@ -38,6 +38,9 @@ target_link_libraries(day06 aocpp)
|
|||
add_executable(day07 day07.cpp)
|
||||
target_link_libraries(day07 aocpp intcode)
|
||||
|
||||
add_executable(day08 day08.cpp)
|
||||
target_link_libraries(day08 aocpp)
|
||||
|
||||
add_executable(day09 day09.cpp)
|
||||
target_link_libraries(day09 aocpp intcode)
|
||||
|
||||
|
|
74
day08.cpp
Normal file
74
day08.cpp
Normal file
|
@ -0,0 +1,74 @@
|
|||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <array>
|
||||
#include <iostream>
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
|
||||
#include <aocpp/Startup.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
using Layer = std::array<char, 150>;
|
||||
|
||||
auto SplitLayers(std::istream & in) {
|
||||
std::string line;
|
||||
std::getline(in, line);
|
||||
|
||||
std::vector<Layer> layers;
|
||||
|
||||
auto it = line.begin();
|
||||
auto layer_n = line.size() / 150;
|
||||
for (std::size_t layer = 0; layer < layer_n; layer++) {
|
||||
layers.push_back({});
|
||||
for (std::size_t y = 0; y < 150; y++) {
|
||||
layers.back()[y] = *it++;
|
||||
}
|
||||
}
|
||||
return layers;
|
||||
}
|
||||
|
||||
auto Part1(std::vector<Layer> const& layers) {
|
||||
std::size_t part1 = 0;
|
||||
std::size_t seen = std::numeric_limits<std::size_t>::max();
|
||||
for (auto & layer : layers) {
|
||||
auto zeros = std::count(layer.begin(), layer.end(), '0');
|
||||
if (zeros < seen) {
|
||||
seen = zeros;
|
||||
part1
|
||||
= std::count(layer.begin(), layer.end(), '1')
|
||||
* std::count(layer.begin(), layer.end(), '2');
|
||||
}
|
||||
}
|
||||
return part1;
|
||||
}
|
||||
|
||||
auto Flatten(std::vector<Layer> const& layers) {
|
||||
Layer merged {};
|
||||
for (std::size_t i = 0; i < 150; i++) {
|
||||
for (auto & layer : layers) {
|
||||
if ('2' != layer[i]) {
|
||||
merged[i] = layer[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return merged;
|
||||
}
|
||||
|
||||
auto Draw(Layer picture) {
|
||||
for (std::size_t y = 0; y < 6; y++) {
|
||||
for (std::size_t x = 0; x < 25; x++) {
|
||||
std::cout << ('1' == picture[y*25+x] ? "▓" : "░");
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
auto main(int argc, char** argv) -> int {
|
||||
auto layers = SplitLayers(aocpp::Startup(argc, argv));
|
||||
std::cout << "Part 1: " << Part1(layers) << std::endl;
|
||||
Draw(Flatten(layers));
|
||||
}
|
Loading…
Reference in New Issue
Block a user