int main() { // unit_test(); auto instructionsInText = readStrings(INPUT_FILE); auto program = parseInstructions(instructionsInText); Computer c; c.program = program; // Part1 { c.reset(); c.start(); auto regA = c.registers.registerValues[0]; cout << "Day 12 part 1 answer: " << regA << endl; } // Part 2 { c.reset(); c.registers.registerValues[2 /* c */] = 1; c.start(); auto regA = c.registers.registerValues[0]; cout << "Day 12 part 2 answer: " << regA << endl; } return 0; }
int searchInput(const Program& p) { int inputValue = 0; int time = 0; const int maxIterations = 1000; bool invalid=false; while(true) { Computer c; c.program = p; c.setOut([&c, &invalid, &time, maxIterations](int v) { if ( (time%2) != v) { // incorrect out invalid = true; c.halt(); } if (time == maxIterations) { c.halt(); } time++; }); c.reset(); invalid = false; time = 0; c.registers.registerValues[0] = inputValue; c.start(); if(!invalid) { // yes!!! return inputValue; } inputValue++; } return -1; }