diff --git a/02/src/main.zig b/02/src/main.zig index c790985..3918edf 100644 --- a/02/src/main.zig +++ b/02/src/main.zig @@ -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("."); + } + } + } } diff --git a/lib/intcode/intcode.zig b/lib/intcode/intcode.zig index f6516ea..95a8f78 100644 --- a/lib/intcode/intcode.zig +++ b/lib/intcode/intcode.zig @@ -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 => {