Day 2.2
This commit is contained in:
@@ -11,4 +11,34 @@ pub fn main() anyerror!void {
|
|||||||
|
|
||||||
// Part 1
|
// Part 1
|
||||||
std.debug.warn("Part 1: {}\n", try intcode.runCopy(alloc, program, 12, 2));
|
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(".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -47,7 +47,7 @@ pub fn run(program: []u32, noun: u32, verb: u32) anyerror!u32 {
|
|||||||
// TODO: create a nice struct
|
// TODO: create a nice struct
|
||||||
|
|
||||||
while (!exit) {
|
while (!exit) {
|
||||||
std.debug.warn(" IP {d:4}: ", ip);
|
// std.debug.warn(" IP {d:4}: ", ip);
|
||||||
const opcode = switch (program[ip]) {
|
const opcode = switch (program[ip]) {
|
||||||
1 => {
|
1 => {
|
||||||
var a = program[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 dest = program[ip + 3];
|
||||||
var result = a + b;
|
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;
|
program[dest] = result;
|
||||||
ip += 4;
|
ip += 4;
|
||||||
},
|
},
|
||||||
@@ -65,12 +65,12 @@ pub fn run(program: []u32, noun: u32, verb: u32) anyerror!u32 {
|
|||||||
var dest = program[ip + 3];
|
var dest = program[ip + 3];
|
||||||
var result = a * b;
|
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;
|
program[dest] = result;
|
||||||
ip += 4;
|
ip += 4;
|
||||||
},
|
},
|
||||||
99 => {
|
99 => {
|
||||||
std.debug.warn("EXIT\n");
|
// std.debug.warn("EXIT\n");
|
||||||
exit = true;
|
exit = true;
|
||||||
},
|
},
|
||||||
else => {
|
else => {
|
||||||
|
Reference in New Issue
Block a user