aocpp/2019/19.cpp

53 lines
1.1 KiB
C++

#include <iostream>
#include <aocpp/Coord.hpp>
#include <aocpp/Startup.hpp>
#include <intcode/intcode.hpp>
using namespace aocpp;
using namespace intcode;
namespace {
class Scanner {
Machine machine_;
public:
Scanner(Machine machine) : machine_{std::move(machine)} {}
auto operator()(ValueType x, ValueType y) const -> bool {
Machine m {machine_};
StepInput(m, x);
StepInput(m, y);
return StepOutput(m);
}
};
auto Part1(Scanner const& scanner) {
std::int64_t count {};
for (std::int64_t y = 0; y < 50; y++) {
for (std::int64_t x = 0; x < 50; x++) {
if (scanner(x, y)) {
count++;
}
}
}
return count;
}
auto Part2(Scanner const& scanner) {
ValueType x = 0;
for(ValueType y = 99;; y++){
for (; !scanner(x, y); x++);
if (scanner(x+99,y-99)) { return 10000 * x + y-99; }
}
}
} // namespace
auto main(int argc, char** argv) -> int {
auto scanner = Scanner{Machine{ParseStream(*aocpp::Startup(argc, argv))}};
std::cout << "Part 1: " << Part1(scanner) << std::endl;
std::cout << "Part 2: " << Part2(scanner) << std::endl;
}