diff options
author | Christian Segundo | 2022-12-09 13:49:31 +0100 |
---|---|---|
committer | Christian Segundo | 2022-12-09 19:12:08 +0100 |
commit | f88650ccc3980ceef9ffd7fdf57519d249ae89df (patch) | |
tree | cd0df095ba5f851cd19b5e70382dde55df662109 | |
parent | 4faf4ac6c6c11d38bce5758d0fb29e38adc0991b (diff) | |
download | advent-of-zig-2022-f88650ccc3980ceef9ffd7fdf57519d249ae89df.tar.gz |
day 9
-rw-r--r-- | day_09.zig | 141 | ||||
-rw-r--r-- | inputs/day_09 | 2000 | ||||
-rw-r--r-- | main.zig | 1 |
3 files changed, 2142 insertions, 0 deletions
diff --git a/day_09.zig b/day_09.zig new file mode 100644 index 0000000..da50864 --- /dev/null +++ b/day_09.zig @@ -0,0 +1,141 @@ +const std = @import("std"); +const Result = @import("util/aoc.zig").Result; + +const GRID_SIZE = [_]usize{ 500, 500 }; + +const Rope = struct { + grid: [GRID_SIZE[0]][GRID_SIZE[1]]i16, + head_position: *[2]i16 = undefined, + tail_position: *[2]i16 = undefined, + + knots: [][2]i16, + + tail_visits: [GRID_SIZE[0]][GRID_SIZE[1]]u2, + + allocator: std.mem.Allocator, + + const start_position = [2]i16{ GRID_SIZE[0] / 2 - 1, GRID_SIZE[1] / 2 - 1 }; + + // in theory? knots can be comptime + fn init(allocator: std.mem.Allocator, knots: usize) Rope { + var k = allocator.alloc([2]i16, knots + 2) catch unreachable; + for (k) |_, i| k[i] = Rope.start_position; + + var rope = Rope{ + .knots = k, + .grid = std.mem.zeroes([GRID_SIZE[0]][GRID_SIZE[1]]i16), + .tail_visits = std.mem.zeroes([GRID_SIZE[0]][GRID_SIZE[1]]u2), + .allocator = allocator, + }; + + rope.tail_position = &rope.knots[k.len - 1]; + rope.head_position = &rope.knots[0]; + + return rope; + } + + fn deinit(self: *Rope) void { + self.allocator.free(self.knots); + } + + fn sync(self: *Rope) void { + for (self.knots[0..self.knots.len]) |*knot, knot_idx| { + if (knot_idx == 0) continue; + + const previous_knot = self.knots[knot_idx - 1]; + const delta = [2]i16{ previous_knot[0] - knot[0], previous_knot[1] - knot[1] }; + + if (std.math.absCast(delta[0]) == 2 and std.math.absCast(delta[1]) == 0) { + knot[0] += std.math.divExact(i16, delta[0], 2) catch unreachable; + } else if (std.math.absCast(delta[0]) == 0 and std.math.absCast(delta[1]) == 2) { + knot[1] += std.math.divExact(i16, delta[1], 2) catch unreachable; + } else if (std.math.absCast(delta[0]) == 2 and std.math.absCast(delta[1]) == 2) { + knot[0] += std.math.divExact(i16, delta[0], 2) catch unreachable; + knot[1] += std.math.divExact(i16, delta[1], 2) catch unreachable; + } else if (std.math.absCast(delta[0]) == 1 and std.math.absCast(delta[1]) == 2) { + knot[0] += delta[0]; + knot[1] += std.math.divExact(i16, delta[1], 2) catch unreachable; + } else if (std.math.absCast(delta[0]) == 2 and std.math.absCast(delta[1]) == 1) { + knot[0] += std.math.divExact(i16, delta[0], 2) catch unreachable; + knot[1] += delta[1]; + } + } + + self.tail_visits[@intCast(usize, self.tail_position.*[0])][@intCast(usize, self.tail_position.*[1])] = 1; + return; + } + + fn up(self: *Rope) void { + self.head_position.*[0] -= 1; + self.sync(); + } + + fn down(self: *Rope) void { + self.head_position.*[0] += 1; + self.sync(); + } + + fn left(self: *Rope) void { + self.head_position.*[1] -= 1; + self.sync(); + } + + fn right(self: *Rope) void { + self.head_position.*[1] += 1; + self.sync(); + } +}; + +pub fn puzzle_1(allocator: std.mem.Allocator, input: []const u8) Result { + var rope = Rope.init(allocator, 0); + defer rope.deinit(); + + var iter = std.mem.split(u8, input, "\n"); + while (iter.next()) |line| { + const n = std.fmt.parseInt(u8, line[2..], 0) catch unreachable; + var i: usize = 0; + switch (line[0]) { + 'R' => while (i < n) : (i += 1) rope.right(), + 'L' => while (i < n) : (i += 1) rope.left(), + 'U' => while (i < n) : (i += 1) rope.up(), + 'D' => while (i < n) : (i += 1) rope.down(), + else => unreachable, + } + } + + var i: u16 = 0; + for (rope.tail_visits) |_, x| { + for (rope.tail_visits[x]) |n| { + if (n == 1) i += 1; + } + } + + return .{ .int = i }; +} + +pub fn puzzle_2(allocator: std.mem.Allocator, input: []const u8) Result { + var rope = Rope.init(allocator, 8); + defer rope.deinit(); + + var iter = std.mem.split(u8, input, "\n"); + while (iter.next()) |line| { + const n = std.fmt.parseInt(u8, line[2..], 0) catch unreachable; + var i: usize = 0; + switch (line[0]) { + 'R' => while (i < n) : (i += 1) rope.right(), + 'L' => while (i < n) : (i += 1) rope.left(), + 'U' => while (i < n) : (i += 1) rope.up(), + 'D' => while (i < n) : (i += 1) rope.down(), + else => unreachable, + } + } + + var i: u16 = 0; + for (rope.tail_visits) |_, x| { + for (rope.tail_visits[x]) |n| { + if (n == 1) i += 1; + } + } + + return .{ .int = i }; +} diff --git a/inputs/day_09 b/inputs/day_09 new file mode 100644 index 0000000..e54f034 --- /dev/null +++ b/inputs/day_09 @@ -0,0 +1,2000 @@ +U 1 +R 2 +D 1 +L 1 +U 2 +D 1 +U 2 +L 1 +D 1 +U 2 +R 1 +U 1 +D 1 +R 1 +L 2 +D 1 +U 1 +D 1 +U 2 +D 2 +R 2 +D 1 +R 2 +D 2 +R 1 +L 2 +U 2 +D 2 +R 2 +D 1 +R 1 +L 1 +D 2 +U 2 +L 2 +U 2 +R 1 +L 1 +D 1 +R 1 +D 2 +U 1 +L 2 +R 1 +U 1 +D 1 +U 1 +D 2 +R 1 +L 1 +U 1 +L 1 +R 2 +U 1 +R 2 +L 2 +U 1 +R 1 +L 2 +R 2 +L 2 +U 1 +D 1 +U 2 +R 1 +D 1 +L 2 +D 1 +L 1 +U 1 +R 2 +U 1 +D 1 +L 2 +R 2 +D 2 +R 2 +D 1 +L 2 +D 1 +R 2 +L 1 +D 2 +R 2 +D 1 +U 1 +L 1 +R 2 +L 2 +D 1 +R 1 +L 1 +U 1 +L 1 +R 1 +U 2 +R 1 +D 2 +R 1 +L 2 +R 1 +L 1 +D 2 +R 2 +L 1 +U 1 +D 1 +L 2 +D 1 +L 1 +R 1 +U 1 +R 3 +U 2 +L 2 +R 1 +L 1 +D 1 +R 1 +U 2 +D 3 +L 1 +R 1 +U 2 +R 1 +U 1 +R 3 +L 3 +U 2 +D 1 +L 1 +R 1 +U 3 +D 1 +L 3 +D 2 +U 3 +R 3 +D 1 +L 3 +D 1 +U 1 +R 3 +L 2 +U 1 +R 3 +U 3 +L 3 +D 1 +R 2 +U 3 +R 2 +L 1 +U 3 +L 3 +R 3 +D 2 +U 1 +L 1 +D 1 +U 3 +D 1 +U 2 +R 1 +L 2 +R 2 +L 2 +D 3 +R 2 +D 2 +U 1 +L 2 +R 2 +L 1 +U 3 +D 3 +R 1 +L 1 +D 3 +L 2 +U 2 +R 3 +L 1 +D 2 +L 1 +R 2 +L 2 +U 2 +D 3 +R 2 +U 3 +D 1 +L 2 +D 3 +U 1 +R 3 +U 1 +R 2 +U 2 +D 1 +L 1 +D 3 +L 2 +U 1 +R 1 +L 1 +U 2 +D 3 +U 3 +R 3 +U 1 +R 1 +D 2 +R 1 +L 2 +D 2 +U 1 +R 3 +D 2 +U 2 +L 2 +R 3 +D 2 +U 1 +R 1 +L 3 +R 1 +U 1 +R 4 +L 2 +R 3 +D 3 +L 3 +D 3 +R 3 +L 2 +R 4 +D 1 +R 2 +U 3 +D 4 +U 2 +R 4 +U 2 +R 3 +L 2 +D 1 +U 3 +D 1 +L 4 +U 4 +D 4 +R 2 +U 1 +L 2 +R 2 +L 4 +R 3 +U 4 +D 3 +R 2 +L 2 +R 2 +D 2 +U 1 +R 2 +U 3 +R 4 +D 1 +L 4 +U 2 +R 3 +U 3 +R 4 +L 1 +D 3 +R 3 +D 4 +R 2 +L 3 +R 1 +D 4 +R 2 +L 2 +U 3 +R 3 +U 2 +R 3 +U 4 +R 1 +L 1 +D 4 +U 4 +D 3 +L 1 +D 3 +L 2 +U 2 +R 2 +D 3 +R 2 +U 1 +R 4 +D 3 +L 2 +D 1 +L 4 +D 1 +R 4 +D 4 +R 1 +U 3 +L 2 +U 1 +R 3 +U 2 +L 3 +D 1 +U 4 +L 2 +D 1 +L 2 +R 3 +U 4 +R 1 +U 1 +L 3 +U 4 +D 3 +L 2 +D 1 +L 3 +R 2 +D 4 +L 1 +D 5 +U 4 +D 2 +R 1 +D 3 +L 3 +R 1 +D 5 +U 3 +D 5 +L 2 +D 1 +L 3 +R 5 +U 4 +L 3 +D 4 +U 5 +D 5 +L 2 +U 5 +L 2 +R 3 +L 1 +U 2 +D 4 +R 3 +D 4 +U 5 +D 3 +U 4 +L 4 +R 1 +L 5 +U 5 +R 2 +U 4 +R 3 +D 1 +U 1 +R 2 +U 4 +R 2 +D 2 +U 1 +R 1 +L 2 +D 1 +U 5 +L 4 +R 2 +D 1 +U 1 +D 2 +U 2 +D 5 +L 2 +R 5 +U 5 +L 5 +D 2 +L 1 +U 3 +D 1 +R 3 +D 2 +L 3 +R 3 +D 3 +R 2 +L 1 +D 1 +U 2 +R 2 +L 2 +R 5 +U 4 +D 3 +L 4 +U 4 +D 1 +U 4 +D 2 +U 5 +L 4 +R 5 +D 4 +R 2 +D 2 +R 5 +D 4 +U 1 +D 3 +U 5 +R 3 +D 2 +R 5 +L 1 +U 5 +R 5 +U 1 +R 3 +U 3 +R 4 +U 1 +L 4 +R 1 +U 3 +L 2 +U 6 +D 4 +U 3 +D 1 +R 2 +L 6 +U 3 +D 4 +U 1 +L 6 +U 1 +R 1 +U 6 +D 5 +U 5 +R 4 +U 1 +L 4 +D 1 +U 5 +R 3 +L 2 +U 3 +L 6 +R 5 +U 4 +R 5 +D 1 +L 6 +U 3 +L 5 +U 2 +L 5 +R 2 +U 6 +R 6 +D 1 +R 1 +U 3 +R 6 +U 5 +L 4 +U 2 +R 5 +L 2 +U 1 +D 1 +U 5 +R 2 +U 2 +L 4 +R 2 +D 1 +L 4 +U 1 +L 6 +R 6 +U 2 +D 5 +U 5 +D 4 +L 1 +R 3 +L 5 +U 6 +R 4 +D 1 +U 2 +R 1 +D 3 +R 1 +L 5 +D 3 +R 3 +U 5 +L 6 +R 3 +U 5 +L 2 +U 3 +R 3 +D 3 +U 1 +L 2 +U 2 +L 3 +D 6 +L 3 +D 4 +R 4 +D 4 +U 6 +L 6 +D 2 +R 1 +U 3 +L 6 +R 4 +D 1 +L 2 +U 4 +L 6 +U 1 +L 4 +D 1 +L 3 +R 2 +L 1 +R 2 +L 3 +R 1 +U 7 +D 7 +L 7 +U 1 +R 2 +U 6 +R 4 +L 6 +U 3 +R 4 +U 7 +D 5 +R 6 +U 6 +L 6 +R 4 +D 1 +U 3 +R 5 +L 2 +D 2 +U 5 +L 1 +D 3 +R 5 +L 2 +U 4 +D 1 +R 5 +U 2 +R 4 +L 3 +R 4 +L 2 +D 2 +L 4 +D 1 +U 4 +D 4 +R 4 +L 5 +R 2 +D 2 +L 2 +D 1 +L 2 +D 1 +L 4 +D 5 +R 7 +U 7 +L 2 +D 3 +L 4 +R 7 +D 7 +U 2 +D 7 +L 6 +D 3 +U 5 +R 5 +D 3 +U 7 +D 3 +L 5 +D 3 +R 4 +D 4 +L 7 +D 6 +U 2 +L 3 +R 6 +U 5 +R 7 +U 3 +L 1 +R 7 +U 2 +R 4 +L 7 +U 2 +D 4 +U 5 +D 6 +U 4 +D 6 +U 7 +R 1 +L 4 +R 3 +L 6 +U 4 +R 7 +L 6 +U 7 +D 1 +U 7 +D 4 +L 1 +D 3 +R 6 +U 3 +R 5 +L 4 +R 4 +L 4 +U 7 +R 3 +L 4 +D 7 +R 6 +U 2 +L 3 +U 8 +D 3 +U 4 +D 1 +R 4 +U 5 +R 2 +U 4 +D 8 +L 2 +D 8 +R 4 +L 1 +R 7 +L 6 +U 4 +L 4 +D 7 +L 3 +D 2 +U 8 +R 8 +U 6 +R 7 +D 3 +U 7 +R 1 +L 8 +D 2 +L 3 +R 5 +D 3 +U 3 +R 8 +L 1 +R 6 +L 8 +U 2 +D 4 +R 6 +L 6 +D 5 +U 4 +L 6 +U 1 +L 6 +U 3 +D 5 +U 5 +L 6 +D 8 +R 5 +D 4 +R 6 +U 7 +L 1 +D 2 +R 2 +L 7 +R 4 +D 7 +L 3 +U 6 +R 7 +D 3 +L 3 +D 2 +U 1 +R 3 +L 8 +U 8 +D 5 +L 6 +R 3 +L 6 +D 3 +R 4 +U 3 +L 8 +D 7 +L 6 +R 5 +D 6 +R 6 +D 3 +L 4 +R 1 +D 6 +U 3 +R 1 +D 5 +U 4 +L 1 +R 2 +U 6 +D 6 +R 7 +L 1 +R 6 +U 7 +D 8 +R 2 +U 3 +L 6 +U 2 +D 6 +U 8 +L 3 +U 4 +D 6 +R 6 +L 5 +U 9 +R 8 +L 2 +D 6 +R 3 +L 4 +D 2 +L 7 +D 5 +L 7 +U 8 +D 6 +L 9 +D 3 +L 5 +U 3 +L 8 +D 7 +R 8 +U 2 +L 9 +U 7 +D 7 +U 6 +D 5 +R 2 +D 8 +R 9 +U 4 +R 1 +L 3 +D 7 +R 2 +L 6 +U 1 +L 7 +D 8 +U 9 +R 9 +D 1 +U 9 +D 1 +R 1 +D 6 +R 7 +D 1 +L 1 +R 6 +U 3 +R 7 +U 2 +R 5 +U 6 +R 2 +L 7 +R 8 +D 9 +U 5 +L 9 +R 9 +U 2 +L 7 +R 4 +U 3 +R 6 +L 6 +D 7 +L 4 +R 7 +D 5 +L 5 +D 7 +U 8 +R 8 +L 8 +R 5 +D 5 +U 2 +R 1 +U 5 +R 6 +L 8 +U 9 +R 4 +D 9 +R 4 +D 3 +U 8 +R 8 +U 9 +L 6 +D 9 +R 6 +U 5 +R 1 +U 1 +L 9 +U 8 +L 1 +U 5 +L 1 +D 7 +R 6 +U 1 +D 3 +R 2 +D 3 +R 8 +D 2 +U 4 +R 8 +L 9 +D 2 +U 2 +R 4 +D 10 +L 4 +U 3 +D 6 +R 4 +U 8 +L 8 +U 3 +L 10 +D 7 +U 2 +L 6 +R 2 +U 8 +L 10 +U 7 +D 8 +L 7 +U 10 +R 4 +U 1 +L 1 +D 4 +U 10 +D 9 +U 4 +L 10 +R 4 +D 5 +U 8 +D 1 +R 5 +D 10 +L 8 +D 1 +U 2 +L 7 +U 1 +L 6 +D 2 +R 3 +L 3 +U 5 +R 9 +U 10 +D 5 +U 7 +L 3 +R 5 +U 7 +L 4 +U 1 +D 2 +U 8 +L 8 +U 7 +R 9 +L 1 +D 10 +R 8 +L 4 +U 4 +L 10 +R 2 +L 3 +D 7 +L 10 +R 6 +U 5 +D 4 +U 6 +R 10 +D 8 +U 3 +L 1 +R 1 +D 2 +R 1 +U 1 +R 5 +U 9 +R 6 +U 10 +L 2 +U 5 +L 7 +R 8 +U 10 +D 6 +L 3 +U 2 +L 4 +R 6 +L 5 +D 9 +U 3 +D 3 +R 10 +L 10 +D 4 +R 7 +D 7 +U 3 +L 5 +R 5 +L 9 +R 2 +U 8 +R 10 +U 10 +L 4 +U 1 +D 2 +U 5 +L 11 +R 3 +L 10 +U 7 +D 6 +U 11 +D 11 +U 2 +L 7 +D 11 +U 8 +L 5 +U 7 +L 10 +D 7 +L 2 +U 5 +D 4 +R 9 +L 10 +D 1 +U 6 +R 2 +L 7 +U 1 +R 4 +D 11 +U 2 +R 9 +U 11 +R 6 +U 9 +L 9 +D 3 +R 6 +L 4 +R 1 +L 5 +R 2 +U 3 +R 1 +U 7 +D 1 +R 11 +L 2 +D 7 +L 10 +U 1 +R 8 +L 6 +U 7 +D 11 +R 1 +U 11 +L 8 +D 6 +R 6 +D 10 +U 2 +D 1 +L 6 +R 9 +L 8 +U 10 +R 4 +U 4 +R 9 +D 3 +R 8 +D 11 +L 4 +U 8 +D 6 +R 1 +U 5 +L 8 +U 6 +R 9 +U 1 +R 8 +D 6 +R 4 +D 7 +R 7 +L 1 +D 6 +L 3 +D 9 +L 10 +D 5 +U 10 +L 11 +D 5 +U 9 +R 10 +L 11 +R 1 +U 6 +L 4 +U 7 +R 9 +L 10 +D 9 +R 5 +L 2 +D 1 +U 12 +L 7 +D 9 +U 8 +R 12 +L 11 +D 12 +L 4 +D 10 +U 7 +L 5 +U 6 +L 5 +R 3 +L 9 +U 7 +L 8 +U 10 +L 8 +R 1 +U 3 +D 6 +L 12 +U 6 +D 7 +L 7 +U 2 +D 8 +U 10 +L 12 +R 5 +L 7 +R 11 +D 5 +L 2 +R 10 +L 7 +U 9 +D 6 +R 3 +U 9 +L 1 +U 2 +D 9 +U 1 +D 2 +L 11 +R 4 +D 4 +L 6 +R 10 +L 6 +U 10 +L 2 +D 3 +R 12 +L 5 +R 5 +L 9 +D 6 +R 12 +U 6 +R 6 +D 6 +R 3 +L 12 +D 12 +L 10 +R 7 +U 7 +L 8 +R 6 +L 5 +D 3 +L 5 +U 12 +L 6 +U 10 +D 11 +U 11 +D 1 +U 9 +R 8 +L 8 +U 5 +R 3 +L 4 +R 6 +U 10 +L 1 +D 1 +R 7 +D 8 +L 1 +D 6 +R 3 +U 2 +D 4 +L 10 +D 9 +L 12 +U 6 +D 9 +U 8 +D 8 +L 8 +U 1 +D 6 +U 6 +D 4 +R 9 +L 5 +U 6 +R 7 +U 6 +D 3 +U 6 +D 10 +U 1 +L 13 +D 4 +U 6 +L 10 +R 6 +D 7 +U 9 +R 2 +L 5 +D 4 +U 10 +D 7 +L 12 +D 2 +R 1 +D 4 +R 1 +U 6 +L 9 +D 12 +U 8 +L 6 +U 4 +R 2 +L 1 +D 12 +U 12 +L 1 +D 7 +L 3 +R 10 +L 10 +U 2 +D 8 +R 5 +U 2 +L 5 +R 8 +L 5 +D 9 +L 11 +U 1 +D 6 +R 11 +D 11 +L 6 +R 13 +L 8 +U 7 +R 11 +L 9 +D 5 +L 2 +U 1 +D 13 +R 3 +D 2 +R 9 +U 3 +R 8 +D 10 +U 5 +D 3 +L 2 +D 9 +R 10 +D 4 +U 13 +D 10 +U 2 +R 8 +D 9 +R 13 +U 4 +D 3 +L 6 +U 8 +L 3 +R 3 +D 4 +U 6 +L 7 +R 3 +L 1 +D 1 +R 5 +U 8 +D 8 +U 11 +R 5 +U 2 +R 10 +L 3 +D 4 +U 1 +R 9 +L 7 +R 6 +L 13 +U 8 +L 8 +D 5 +R 10 +L 9 +U 7 +L 9 +U 9 +L 7 +R 5 +L 5 +U 7 +D 12 +U 7 +D 6 +R 14 +D 5 +L 11 +R 6 +L 4 +U 8 +R 9 +U 7 +R 12 +L 10 +U 10 +L 11 +R 7 +D 11 +R 7 +L 4 +D 9 +L 13 +R 6 +L 13 +D 2 +R 13 +D 12 +R 4 +U 11 +R 4 +D 3 +R 3 +L 12 +R 3 +D 11 +R 7 +D 7 +R 3 +U 4 +R 12 +D 14 +R 3 +L 10 +U 9 +L 2 +U 14 +L 2 +D 7 +U 10 +D 4 +U 6 +L 1 +D 11 +R 10 +D 1 +L 2 +U 9 +L 6 +R 12 +D 11 +R 8 +U 7 +D 2 +U 4 +D 12 +L 1 +U 8 +D 14 +R 2 +D 13 +R 10 +D 10 +R 14 +L 4 +D 14 +L 6 +R 13 +L 12 +U 4 +R 13 +L 12 +D 14 +L 1 +U 1 +L 4 +D 14 +R 12 +D 6 +U 11 +L 12 +U 2 +R 8 +D 14 +U 13 +D 6 +L 7 +D 4 +U 3 +L 8 +U 2 +D 12 +L 13 +U 8 +R 4 +D 10 +L 10 +U 5 +D 3 +L 10 +D 13 +R 15 +U 9 +L 10 +D 1 +U 11 +D 7 +U 3 +R 6 +L 11 +D 4 +R 8 +D 3 +U 7 +D 6 +L 11 +D 14 +R 15 +L 14 +D 2 +L 11 +R 13 +U 4 +D 13 +L 6 +D 4 +L 15 +D 5 +L 6 +U 8 +R 13 +L 5 +U 4 +R 9 +L 13 +D 3 +U 11 +R 6 +L 14 +R 9 +U 5 +D 5 +U 9 +D 12 +R 11 +U 8 +D 1 +R 2 +U 6 +R 11 +L 4 +R 7 +D 6 +U 6 +D 1 +L 4 +R 14 +D 11 +R 3 +U 9 +D 15 +L 14 +D 9 +R 4 +U 14 +R 3 +L 14 +D 15 +L 12 +R 5 +D 6 +U 15 +D 13 +U 10 +R 4 +D 3 +R 11 +U 11 +R 4 +L 1 +D 11 +U 14 +D 1 +U 14 +R 1 +L 14 +D 4 +U 12 +D 9 +L 13 +U 10 +D 14 +L 4 +U 15 +L 12 +U 3 +D 6 +U 1 +D 2 +R 13 +L 12 +U 2 +L 12 +D 7 +L 3 +U 15 +L 5 +R 9 +L 12 +U 1 +L 16 +D 4 +L 5 +U 16 +R 6 +D 4 +U 6 +R 3 +L 1 +D 7 +L 4 +D 1 +U 5 +D 1 +L 6 +R 2 +L 8 +R 3 +L 12 +D 15 +R 9 +L 5 +U 12 +L 5 +U 9 +R 14 +D 16 +R 13 +L 12 +U 3 +L 16 +D 3 +R 6 +U 2 +R 4 +D 2 +L 6 +D 15 +L 11 +D 6 +U 9 +D 13 +U 7 +L 10 +D 12 +L 4 +R 9 +U 5 +R 9 +U 16 +R 15 +D 10 +R 14 +L 8 +U 8 +D 8 +R 13 +U 6 +R 5 +D 9 +L 11 +R 1 +D 4 +L 3 +D 1 +U 11 +R 2 +L 7 +R 14 +D 5 +R 16 +U 11 +L 2 +D 1 +U 4 +R 15 +L 13 +R 3 +U 1 +R 1 +U 3 +R 16 +D 1 +L 4 +R 9 +L 3 +D 14 +R 15 +D 13 +U 13 +D 5 +U 8 +L 3 +U 6 +D 10 +U 6 +D 2 +U 13 +R 5 +L 16 +R 16 +U 12 +R 10 +D 13 +L 1 +D 13 +R 15 +D 7 +R 7 +U 16 +R 10 +U 7 +L 14 +D 4 +L 6 +U 9 +L 15 +R 6 +L 14 +D 5 +R 6 +D 5 +L 6 +R 1 +U 13 +L 15 +R 14 +L 12 +D 2 +L 1 +U 1 +R 13 +L 11 +R 15 +D 17 +L 13 +R 8 +D 14 +R 2 +D 1 +R 3 +U 8 +R 8 +L 14 +D 6 +U 3 +D 9 +R 12 +L 13 +U 2 +D 8 +U 15 +D 16 +L 5 +D 7 +U 15 +R 7 +L 5 +R 13 +D 4 +L 7 +R 1 +D 7 +L 11 +R 2 +U 17 +L 6 +U 15 +D 5 +R 17 +D 12 +U 17 +L 3 +R 15 +U 7 +L 2 +R 5 +D 17 +L 12 +U 10 +D 5 +L 16 +R 17 +D 2 +R 15 +D 4 +U 1 +D 5 +U 10 +L 8 +U 16 +D 2 +L 11 +R 7 +U 15 +L 15 +D 2 +L 8 +R 3 +U 8 +R 7 +U 6 +L 17 +U 8 +R 6 +L 13 +R 6 +D 13 +L 9 +U 2 +R 7 +D 14 +L 10 +U 8 +D 10 +U 4 +R 3 +L 1 +D 5 +U 18 +L 1 +U 9 +D 4 +R 3 +D 11 +R 9 +U 18 +D 12 +R 13 +L 8 +D 6 +U 13 +R 6 +U 15 +R 14 +U 11 +R 11 +D 15 +L 7 +R 11 +D 16 +U 14 +R 15 +D 16 +R 3 +D 10 +R 6 +U 17 +L 9 +R 1 +D 12 +R 18 +U 11 +L 2 +R 5 +L 10 +U 13 +L 3 +D 15 +U 14 +D 13 +R 5 +U 15 +L 9 +U 6 +D 16 +L 1 +U 1 +D 12 +R 18 +L 13 +R 10 +U 14 +L 13 +U 3 +L 2 +R 11 +U 18 +D 14 +R 4 +L 6 +R 10 +U 18 +L 18 +R 9 +L 11 +U 4 +D 5 +L 15 +R 13 +L 18 +U 16 +L 1 +R 12 +U 17 +D 11 +U 1 +L 13 +U 7 +D 3 +U 5 +R 8 +D 4 +L 7 +D 17 +U 9 +R 1 +L 18 +U 13 +L 7 +U 12 +D 2 +R 18 +D 12 +U 11 +R 13 +U 12 +L 13 +R 7 +U 6 +D 5 +L 13 +D 15 +R 12 +D 8 +L 19 +U 10 +L 4 +D 18 +U 9 +D 5 +U 2 +L 1 +D 2 +R 8 +U 9 +R 1 +D 11 +U 18 +R 11 +D 19 +U 6 +D 14 +U 6 +D 4 +U 2 +L 12 +D 15 +L 10 +R 5 +U 16 +L 3 +D 8 +L 10 +D 7 +R 16 +D 8 +R 6 +L 16 +R 6 +D 8 +U 15 +D 1 +L 14 +U 14 +R 16 +L 14 +D 2 +R 6 +D 5 +R 14 +L 15 +D 2 +R 15 +L 4 +U 18 +R 8 +D 6 +R 7 +L 2 +U 5 +L 19 +R 17 +L 19 +R 13 +L 2 +U 7 +D 19 +R 9 +L 8 +D 18 +U 2 +R 3 +U 7 +D 9 +R 12 +U 13 +L 15 +U 2 +D 6 +R 18 +D 7 +L 10 +R 4 +L 12 +D 6 +L 4 +D 10 +L 7 +U 12 +L 9 +R 12 +L 13 +R 13 +L 18 +R 18 +U 7 +D 5 +R 8 +D 18 +L 11 +D 5 +L 1 +U 6 +R 19 +U 17 +R 16 +L 8 +R 11 +U 17 +D 1 +R 11 +L 12 +D 4 +U 13 @@ -14,6 +14,7 @@ const t = [_]struct { .{ .day = @import("day_06.zig"), .input = @embedFile("inputs/day_06"), .expect = &[_]Result{ .{ .int = 1896 }, .{ .int = 3452 } } }, .{ .day = @import("day_07.zig"), .input = @embedFile("inputs/day_07"), .expect = &[_]Result{ .{ .int = 1427048 }, .{ .int = 2940614 } } }, .{ .day = @import("day_08.zig"), .input = @embedFile("inputs/day_08"), .expect = &[_]Result{ .{ .int = 1859 }, .{ .int = 332640 } } }, + .{ .day = @import("day_09.zig"), .input = @embedFile("inputs/day_09"), .expect = &[_]Result{ .{ .int = 6087 }, .{ .int = 2493 } } }, }; pub fn main() !void { |