const std = @import("std"); fn part1(directions: std.ArrayList(u8), floor: *i16) void { for (directions.items) |direction| { if (direction == '(') { floor.* += 1; } else if (direction == ')') { floor.* -= 1; } } } fn part2(directions: std.ArrayList(u8), pos: *i16) void { var floor: i16 = 0; for (directions.items) |direction| { if (direction == '(') { floor += 1; } else if (direction == ')') { floor -= 1; } pos.* += 1; if (floor == -1) break; } } pub fn main() !void { const file = try std.fs.cwd().openFile("day1.txt", .{}); defer file.close(); var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); const alloc = arena.allocator(); var buf = std.io.bufferedReader(file.reader()); var directions = std.ArrayList(u8).init(alloc); defer directions.deinit(); while (true) { buf.reader().streamUntilDelimiter(directions.writer(), '\n', null) catch |err| switch (err) { error.EndOfStream => break, else => return err, }; } var floor: i16 = 0; var position: i16 = 0; part1(directions, &floor); part2(directions, &position); std.debug.print("Ending floor: {d}\n", .{floor}); std.debug.print("Position when first entering basement: {d}\n", .{position}); }