This commit is contained in:
2019-12-02 20:13:09 +00:00
parent e943794b67
commit de87b93be1
3 changed files with 86 additions and 0 deletions

14
02/build.zig Normal file
View File

@@ -0,0 +1,14 @@
const Builder = @import("std").build.Builder;
pub fn build(b: *Builder) void {
const mode = b.standardReleaseOptions();
const exe = b.addExecutable("02", "src/main.zig");
exe.setBuildMode(mode);
exe.install();
const run_cmd = exe.run();
run_cmd.step.dependOn(b.getInstallStep());
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
}

1
02/input Normal file
View File

@@ -0,0 +1 @@
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,13,19,2,9,19,23,1,23,6,27,1,13,27,31,1,31,10,35,1,9,35,39,1,39,9,43,2,6,43,47,1,47,5,51,2,10,51,55,1,6,55,59,2,13,59,63,2,13,63,67,1,6,67,71,1,71,5,75,2,75,6,79,1,5,79,83,1,83,6,87,2,10,87,91,1,9,91,95,1,6,95,99,1,99,6,103,2,103,9,107,2,107,10,111,1,5,111,115,1,115,6,119,2,6,119,123,1,10,123,127,1,127,5,131,1,131,2,135,1,135,5,0,99,2,0,14,0

71
02/src/main.zig Normal file
View 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]);
}