summaryrefslogtreecommitdiff
path: root/day_10.zig
diff options
context:
space:
mode:
Diffstat (limited to 'day_10.zig')
-rw-r--r--day_10.zig73
1 files changed, 73 insertions, 0 deletions
diff --git a/day_10.zig b/day_10.zig
new file mode 100644
index 0000000..b8cacc7
--- /dev/null
+++ b/day_10.zig
@@ -0,0 +1,73 @@
+const std = @import("std");
+const Result = @import("util/aoc.zig").Result;
+
+pub fn puzzle_1(input: []const u8) Result {
+ var cycle: u16 = 1;
+ var register: i16 = 1;
+ var sum: u16 = 0;
+
+ var iter = std.mem.split(u8, input, "\n");
+ while (iter.next()) |line| {
+ if (cycle % 40 == 20) sum += cycle * @intCast(u16, register);
+ cycle += 1;
+
+ if (line[0] != 'a') continue;
+
+ const n = std.fmt.parseInt(i16, line[5..], 0) catch unreachable;
+
+ if (cycle % 40 == 20) sum += cycle * @intCast(u16, register);
+ cycle += 1;
+
+ register += n;
+ }
+
+ return .{ .int = sum };
+}
+
+fn crt(cycle: u16, register: i16, screen: *[6][40]bool) void {
+ const pixel_id = (cycle - 1) % 240;
+ const pixel_row = pixel_id / 40;
+ const pixel_col = pixel_id % 40;
+
+ if (pixel_col == register or pixel_col == (register - 1) or pixel_col == (register + 1)) {
+ screen.*[pixel_row][pixel_col] = true;
+ } else {
+ screen.*[pixel_row][pixel_col] = false;
+ }
+}
+
+pub fn puzzle_2(input: []const u8) Result {
+ var cycle: u16 = 1;
+ var register: i16 = 1;
+ var screen = [_][40]bool{[_]bool{false} ** 40} ** 6;
+
+ var iter = std.mem.split(u8, input, "\n");
+ while (iter.next()) |line| {
+ crt(cycle, register, &screen);
+ cycle += 1;
+ crt(cycle, register, &screen);
+ if (line[0] != 'a') continue;
+ const n = std.fmt.parseInt(i16, line[5..], 0) catch unreachable;
+ cycle += 1;
+ crt(cycle, register, &screen);
+ register += n;
+ }
+
+ //for (screen) |row| {
+ //for (row) |pixel| {
+ //if (pixel) {
+ //std.debug.print("@", .{});
+ //} else {
+ //std.debug.print(" ", .{});
+ //}
+ //}
+ //std.debug.print("\n", .{});
+ //}
+
+ var r: usize = 0;
+ for (screen) |row, x| {
+ for (row) |pixel, y| r += y * x * @boolToInt(pixel);
+ }
+
+ return .{ .int = @intCast(i32, r) };
+}