diff --git a/day11.cpp b/day11.cpp index 169f8f8..6d775ae 100644 --- a/day11.cpp +++ b/day11.cpp @@ -15,8 +15,8 @@ auto Compute(Machine machine, ValueType start) Coord here {0,0}; std::map paint {{here,start}}; - ValueType dx = 1; - ValueType dy = 0; + ValueType dx {0}; + ValueType dy {-1}; for (;;) { auto effect = machine.Step(); @@ -26,9 +26,8 @@ auto Compute(Machine machine, ValueType start) } std::get(effect).pos = paint[here]; - auto color = std::get(machine.Step()).val; + paint[here] = std::get(machine.Step()).val; auto dir = std::get(machine.Step()).val; - paint[here] = color; std::swap(dx, dy); if (dir) { @@ -41,16 +40,27 @@ auto Compute(Machine machine, ValueType start) } } -auto Draw(std::map image) { - ValueType minX = 1000, maxX = -1000, minY = 1000, maxY = -1000; +auto Draw(std::ostream & out, std::map image) { + ValueType minX = 0, maxX = 0, minY = 0, maxY = 0; + for (auto&& [k, _] : image) { + auto [x,y] = k; + minX = std::min(minX, x); + maxX = std::max(maxX, x); + minY = std::min(minY, y); + maxY = std::max(maxY, y); + } + for (ValueType y = minY; y <= maxY; y++) { + for (ValueType x = minX; x <= maxX; x++) { + out << (image[{x,y}] ? "▓" : "░"); + } + out << "\n"; + } } } // namespace auto main() -> int { auto machine = Machine{ParseStream(std::cin)}; - - std::cout << "Part 1: " << Compute(machine, 0).size() << std::endl; - - Draw(Compute(std::move(machine), 1)); + std::cout << "Part 1: " << Compute(machine, 0).size() << "\nPart 2\n"; + Draw(std::cout, Compute(std::move(machine), 1)); } diff --git a/lib/intcode.cpp b/lib/intcode.cpp index 69ce176..d2bc5a4 100644 --- a/lib/intcode.cpp +++ b/lib/intcode.cpp @@ -21,7 +21,7 @@ auto Ref(Machine & m, ValueType instruction, std::size_t k, ValueType p) case 1: return v; case 2: - return m.At(m.Rel(v)); + return m.Rel(v); default: throw BadInstruction{"invalid addressing mode"}; }