Last active
December 1, 2021 15:19
-
-
Save rhamorim/766e9748a80a9c3ebb51297e1df9e453 to your computer and use it in GitHub Desktop.
Core of the Zig solution for day 1 of Advent of Code 2021
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| fn part1(reports: []const u32) u32 { | |
| var last_report: ?u32 = null; | |
| var increased: u32 = 0; | |
| for (reports) |report| { | |
| if (report > (last_report orelse report)) { | |
| increased += 1; | |
| } | |
| last_report = report; | |
| } | |
| return increased; | |
| } | |
| fn SlidingWindow(comptime size: u8) type { | |
| return struct { | |
| const Self = @This(); | |
| values: [size]u32 = undefined, | |
| pos: u32 = 0, | |
| fn sum(self: Self) ?u32 { | |
| if (self.pos < size) { | |
| return null; | |
| } else { | |
| var s: u32 = 0; | |
| for (self.values) |v| s += v; | |
| return s; | |
| } | |
| } | |
| fn add(self: *Self, value: u32) void { | |
| self.values[self.pos % size] = value; | |
| self.pos += 1; | |
| } | |
| }; | |
| } | |
| fn part2(reports: []const u32) u32 { | |
| var last_report: ?u32 = null; | |
| var increased: u32 = 0; | |
| var sliding_window = SlidingWindow(3){}; | |
| for (reports) |value| { | |
| sliding_window.add(value); | |
| if (sliding_window.sum()) |report| { | |
| if (report > (last_report orelse report)) { | |
| increased += 1; | |
| } | |
| last_report = report; | |
| } | |
| } | |
| return increased; | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Ah, just noticed a bug. "if (self.pos < 3) {" should instead be "if (self.pos < size) {". Fixed.