summaryrefslogtreecommitdiff
path: root/day1/zig/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'day1/zig/src/main.zig')
-rw-r--r--day1/zig/src/main.zig36
1 files changed, 10 insertions, 26 deletions
diff --git a/day1/zig/src/main.zig b/day1/zig/src/main.zig
index 6520d5f..3687178 100644
--- a/day1/zig/src/main.zig
+++ b/day1/zig/src/main.zig
@@ -10,9 +10,16 @@ pub fn main() !void {
}
fn problem(input: []const u8) !struct { u64, u64 } {
- const lines: mem.TokenIterator(u8, .scalar) = mem.tokenizeScalar(u8, input, '\n');
- const part1: u64 = try p1(lines);
- const part2: u64 = try p2(lines);
+ var lines: mem.TokenIterator(u8, .scalar) = mem.tokenizeScalar(u8, input, '\n');
+ var part1: u64 = 0;
+ var part2: u64 = 0;
+ var pos: u32 = 50;
+ while (lines.next()) |line| {
+ const n = try parseline(line);
+ part2 += countzeros(pos, n);
+ if (pos == 0) part1 += 1;
+ pos = rotatepos(pos, n);
+ }
return .{ part1, part2 };
}
@@ -40,29 +47,6 @@ fn countzeros(pos: u64, n: i64) u64 {
return zeros;
}
-fn p1(constLines: mem.TokenIterator(u8, .scalar)) !u64 {
- var pos: u32 = 50;
- var zeros: u64 = 0;
- var lines = constLines;
- while (lines.next()) |line| {
- pos = rotatepos(pos, try parseline(line));
- if (pos == 0) zeros += 1;
- }
- return zeros;
-}
-
-fn p2(constLines: mem.TokenIterator(u8, .scalar)) !u64 {
- var pos: u32 = 50;
- var zeros: u64 = 0;
- var lines = constLines;
- while (lines.next()) |line| {
- const n = try parseline(line);
- zeros += countzeros(pos, n);
- pos = rotatepos(pos, n);
- }
- return zeros;
-}
-
test "Sample Input" {
const input: []const u8 = @embedFile("input_sample.txt");
const part1, const part2 = try problem(input);