diff --git a/src/days/day01.zig b/src/days/day01.zig index df9fec0..7a77996 100644 --- a/src/days/day01.zig +++ b/src/days/day01.zig @@ -12,16 +12,18 @@ pub fn run(_: std.mem.Allocator) !void { var zero_hits: u32 = 0; while (lines.next()) |line| { + if (line.len == 0) continue; + const direction: Direction = if (line[0] == 'L') .left else if (line[0] == 'R') .right else continue; const amount = try std.fmt.parseUnsigned(u32, line[1..], 10); - zero_hits += try updatePosition(&position, direction, amount, 100); + try updatePosition(&position, &zero_hits, direction, amount, 100); + // Part 1: + // if (position == 0) { + // zero_hits += 1; + // } std.debug.print("{s} => {d}\n", .{line, position}); - - if (position == 0) { - zero_hits += 1; - } } var buffer: [8]u8 = undefined; @@ -40,29 +42,28 @@ const Direction = enum { fn updatePosition( position: *u32, + zero_hits: *u32, direction: Direction, amount: u32, upper_bound: u32, -) !u32 { - var signed_position: i32 = @intCast(position.*); - +) !void { switch (direction) { .left => { - signed_position -= @intCast(amount); + for (0..amount) |_| { + if (position.* == 0) position.* = upper_bound; + position.* -= 1; + if (position.* == 0) zero_hits.* += 1; + } }, .right => { - signed_position += @intCast(amount); + for (0..amount) |_| { + position.* += 1; + if (position.* == 100) { + zero_hits.* += 1; + position.* = 0; + } + } }, } - - if (signed_position > upper_bound - 1 or signed_position < 0) { - const signed_upper_bound: i32 = @intCast(upper_bound); - const mod = @mod(signed_position, signed_upper_bound); - position.* = @intCast(mod); - return 0; - } else { - position.* = @intCast(signed_position); - return 0; - } }