This commit is contained in:
2019-12-02 21:37:21 +00:00
parent 637f909678
commit 14eff1a60c
2 changed files with 34 additions and 4 deletions

View File

@@ -11,4 +11,34 @@ pub fn main() anyerror!void {
// Part 1
std.debug.warn("Part 1: {}\n", try intcode.runCopy(alloc, program, 12, 2));
// Part 2: 100*100 = 10,000 combinations to try.
var memory: []u32 = try alloc.alloc(u32, program.len);
var done: bool = false;
var noun: u32 = 0;
var verb: u32 = 0;
std.debug.warn("Part 2: Searching...");
while (!done) {
std.mem.copy(u32, memory, program);
const result = try intcode.run(memory, noun, verb);
// Too high: 250800 (noun=33, verb=76)
if (result == 19690720) {
std.debug.warn("OK! noun={} verb={}\n", noun, verb);
done = true;
}
noun += 1;
if (noun > 100) {
noun = 0;
verb += 1;
if (verb > 100) {
std.debug.warn("failed!\n");
} else {
std.debug.warn(".");
}
}
}
}

View File

@@ -47,7 +47,7 @@ pub fn run(program: []u32, noun: u32, verb: u32) anyerror!u32 {
// TODO: create a nice struct
while (!exit) {
std.debug.warn(" IP {d:4}: ", ip);
// std.debug.warn(" IP {d:4}: ", ip);
const opcode = switch (program[ip]) {
1 => {
var a = program[program[ip + 1]];
@@ -55,7 +55,7 @@ pub fn run(program: []u32, noun: u32, verb: u32) anyerror!u32 {
var dest = program[ip + 3];
var result = a + b;
std.debug.warn("ADD: [{}] + [{}] => {} : {} + {} = {} => {}\n", ip + 1, ip + 2, dest, a, b, result, dest);
// std.debug.warn("ADD: [{}] + [{}] => {} : {} + {} = {} => {}\n", ip + 1, ip + 2, dest, a, b, result, dest);
program[dest] = result;
ip += 4;
},
@@ -65,12 +65,12 @@ pub fn run(program: []u32, noun: u32, verb: u32) anyerror!u32 {
var dest = program[ip + 3];
var result = a * b;
std.debug.warn("MULT: [{}] + [{}] => {} : {} + {} = {} => {}\n", ip + 1, ip + 2, dest, a, b, result, dest);
// std.debug.warn("MULT: [{}] + [{}] => {} : {} + {} = {} => {}\n", ip + 1, ip + 2, dest, a, b, result, dest);
program[dest] = result;
ip += 4;
},
99 => {
std.debug.warn("EXIT\n");
// std.debug.warn("EXIT\n");
exit = true;
},
else => {