const std = @import("std"); pub fn main() !void { const path: [:0]const u8 = std.mem.span(std.os.argv[1]); var file = try std.fs.cwd().openFile(path, .{}); defer file.close(); var buffer: [32]u8 = undefined; var reader = file.reader(&buffer); var dial: i16 = 50; var part1: u64 = 0; var part2: u64 = 0; while (reader.interface.takeDelimiterInclusive('\n')) |line| { const value = try std.fmt.parseInt(i16, line[1 .. line.len - 1], 10); const v = if (line[0] == 'R') value else -value; const next = @mod(dial + v, 100); if (next == 0) { part1 += 1; } part2 += @abs(@divFloor(dial, 100) - @divFloor(dial + v, 100)); if (dial == 0 and v < 0) { part2 -= 1; } if (next == 0 and v < 0) { part2 += 1; } dial = next; } else |err| switch (err) { error.EndOfStream => {}, else => |e| return e, } std.debug.print("part1: {}\n", .{part1}); std.debug.print("part2: {}\n", .{part2}); }