Day 2.1
This commit is contained in:
71
02/src/main.zig
Normal file
71
02/src/main.zig
Normal file
@@ -0,0 +1,71 @@
|
||||
const std = @import("std");
|
||||
|
||||
// Load the whole program into memory in one go
|
||||
fn loadProgram() anyerror![]u32 {
|
||||
const file = std.io.getStdIn();
|
||||
const stream = &file.inStream().stream;
|
||||
var program = [_]u32{0} ** 1024;
|
||||
var buf = [_]u8{0} ** 255;
|
||||
var i: u32 = 0;
|
||||
|
||||
while (try stream.readUntilDelimiterOrEof(&buf, ',')) |num| {
|
||||
var trimmed = std.mem.trimRight(u8, num, "\r\n");
|
||||
program[i] = try std.fmt.parseInt(u32, trimmed, 10);
|
||||
|
||||
std.debug.warn("{},", program[i]);
|
||||
|
||||
i += 1;
|
||||
}
|
||||
|
||||
std.debug.warn("\n");
|
||||
|
||||
return program[0..program.len];
|
||||
}
|
||||
|
||||
pub fn main() anyerror!void {
|
||||
var program = try loadProgram();
|
||||
|
||||
// Initial program state.
|
||||
var ip: u32 = 0;
|
||||
var exit: bool = false;
|
||||
|
||||
// Gravity assist modifications
|
||||
program[1] = 12;
|
||||
program[2] = 2;
|
||||
|
||||
while (!exit) {
|
||||
std.debug.warn(" IP {d:4}: ", ip);
|
||||
const opcode = switch (program[ip]) {
|
||||
1 => {
|
||||
var a = program[program[ip + 1]];
|
||||
var b = program[program[ip + 2]];
|
||||
var dest = program[ip + 3];
|
||||
var result = a + b;
|
||||
|
||||
std.debug.warn("ADD: [{}] + [{}] => {} : {} + {} = {} => {}\n", ip + 1, ip + 2, dest, a, b, result, dest);
|
||||
program[dest] = result;
|
||||
ip += 4;
|
||||
},
|
||||
2 => {
|
||||
var a = program[program[ip + 1]];
|
||||
var b = program[program[ip + 2]];
|
||||
var dest = program[ip + 3];
|
||||
var result = a * b;
|
||||
|
||||
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");
|
||||
exit = true;
|
||||
},
|
||||
else => {
|
||||
std.debug.warn("Unknown opcode at IP {}: {}", ip, program[ip]);
|
||||
exit = true;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
std.debug.warn("Part 1: {}\n", program[0]);
|
||||
}
|
Reference in New Issue
Block a user