Day 11, part 2

This commit is contained in:
2019-12-11 20:50:11 +00:00
parent 48ca004a53
commit fc21396bc8

View File

@@ -1,8 +1,8 @@
const std = @import("std"); const std = @import("std");
const intcode = @import("intcode"); const intcode = @import("intcode");
const boardX = 1024; const boardX = 155;
const boardY = 1024; const boardY = 100;
const Point = struct { const Point = struct {
x: usize, x: usize,
@@ -67,11 +67,8 @@ fn runMachine(m: *intcode.Machine) void {
} }
} }
pub fn main() anyerror!void { fn run(alloc: *std.mem.Allocator, program: []intcode.Word, part1: bool) !void {
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); const part2 = !part1;
defer arena.deinit();
const alloc = &arena.allocator;
var board: Board = undefined; var board: Board = undefined;
for (board) |*row| { for (board) |*row| {
@@ -84,8 +81,11 @@ pub fn main() anyerror!void {
var pos = Point{.x = boardX / 2, .y = boardY / 2}; var pos = Point{.x = boardX / 2, .y = boardY / 2};
var direction = Compass.North; var direction = Compass.North;
var program = try intcode.loadFromStdIn(alloc); // Start on a white panel in part 2
if (part2) board[pos.y][pos.x].colour = .White;
var machine = try intcode.Machine.init(alloc, program); var machine = try intcode.Machine.init(alloc, program);
defer machine.deinit();
var robot = try std.Thread.spawn(&machine, runMachine); var robot = try std.Thread.spawn(&machine, runMachine);
// Robot event loop // Robot event loop
@@ -111,12 +111,36 @@ pub fn main() anyerror!void {
robot.wait(); robot.wait();
var touched: usize = 0; if (part1) {
for (board) |row| { var touched: usize = 0;
for (row) |cell| { for (board) |row| {
if (cell.touched) touched += 1; for (row) |cell| {
if (cell.touched) touched += 1;
}
}
std.debug.warn("Day 11, Part 1: {}\n", touched);
} else {
for (board) |row| {
for (row) |cell| {
switch (cell.colour) {
.Black => std.debug.warn(" "),
.White => std.debug.warn("#"),
}
}
std.debug.warn("\n");
} }
} }
}
std.debug.warn("Day 11, Part 1: {}\n", touched);
pub fn main() anyerror!void {
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const alloc = &arena.allocator;
var program = try intcode.loadFromStdIn(alloc);
try run(alloc, program, true);
try run(alloc, program, false);
} }