aocpp/2019/11.cpp

46 lines
911 B
C++
Raw Normal View History

2022-11-03 19:49:07 -07:00
#include <iostream>
#include <utility>
#include <tuple>
#include <map>
#include <aocpp/Startup.hpp>
#include <aocpp/Coord.hpp>
2022-11-04 09:38:01 -07:00
#include <intcode/intcode.hpp>
using namespace aocpp;
2022-11-03 19:49:07 -07:00
using namespace intcode;
namespace {
auto Compute(Machine machine, ValueType start)
-> std::map<Coord, ValueType> {
2022-11-04 11:37:32 -07:00
2022-11-03 19:49:07 -07:00
Coord here {0,0};
std::map<Coord, ValueType> paint {{here,start}};
2022-11-04 17:39:35 -07:00
Coord dir {0, -1};
2022-11-03 19:49:07 -07:00
2022-11-04 11:36:30 -07:00
bool next_color = true;
Run(machine,
[&]() { return paint[here]; },
[&](auto o) {
if (next_color) {
paint[here] = o;
} else {
2022-11-04 17:39:35 -07:00
dir = (o ? CW : CCW)(dir);
2022-11-04 21:27:08 -07:00
here += dir;
2022-11-04 11:36:30 -07:00
}
next_color = !next_color;
});
return paint;
2022-11-03 19:49:07 -07:00
}
} // namespace
2023-01-31 09:15:15 -08:00
auto Main(std::istream & in, std::ostream & out) -> void
2023-01-31 08:58:42 -08:00
{
auto machine = Machine{ParseStream(in)};
2023-01-31 09:15:15 -08:00
out << "Part 1: " << Compute(machine, 0).size() << "\nPart 2\n";
Draw(out, Compute(std::move(machine), 1));
2022-11-03 19:49:07 -07:00
}