Line data Source code
1 : #include "Intcode.h"
2 : #include "Parsing.h"
3 : #include "PuzzleImpl.h"
4 :
5 : namespace {} // namespace
6 :
7 1 : template <> size_t part1<2019, 2>(std::string_view const input) {
8 1 : Computer c(input);
9 1 : c.writeMemory(1, 12);
10 1 : c.writeMemory(2, 2);
11 1 : ASSERT(c.run() == Computer::HALTED);
12 1 : return c.readMemory(0);
13 1 : }
14 :
15 1 : template <> size_t part2<2019, 2>(std::string_view const input) {
16 1 : constexpr int64_t expectedResult = 19690720;
17 1 : Computer c(input);
18 1 : std::vector<int64_t> const originalMemory = c.memdump();
19 1 : int64_t noun = 0;
20 1 : int64_t verb = 0;
21 42 : for (; noun < 100; ++noun) {
22 4154 : for (verb = 0; verb < 100; ++verb) {
23 4113 : c.reset(originalMemory);
24 4113 : c.writeMemory(1, noun);
25 4113 : c.writeMemory(2, verb);
26 4113 : ASSERT(c.run() == Computer::HALTED);
27 4113 : if (c.readMemory(0) == expectedResult)
28 1 : break;
29 4113 : }
30 42 : if (c.readMemory(0) == expectedResult)
31 1 : break;
32 42 : }
33 : ASSERT(c.readMemory(0) == expectedResult);
34 1 : return 100 * noun + verb;
35 1 : }
|