const eql = std.mem.eql; const parseUnsigned = std.fmt.parseUnsigned; const print = std.debug.print; const std = @import("std"); const tokenize = std.mem.tokenize; pub fn main() !void { var position = @as(usize, 0); var depth = @as(usize, 0); defer print("{}\n", .{ position * depth }); var aim = @as(usize, 0); var input = tokenize(@embedFile("input"), "\n"); while (input.next()) |line| { var command = tokenize(line, " "); const direction = command.next().?; const x = try parseUnsigned(usize, command.next().?, 10); if (eql(u8, direction, "forward")) { position += x; depth += aim * x; } else if (eql(u8, direction, "down")) { aim += x; } else if (eql(u8, direction, "up")) { aim -= x; } else unreachable; } }