From 061a5bae272f45db6dcde99746922735f9769d25 Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Mon, 5 Dec 2022 17:00:08 +0100 Subject: add day 5 --- day_01.zig | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 day_01.zig (limited to 'day_01.zig') diff --git a/day_01.zig b/day_01.zig new file mode 100644 index 0000000..80bb649 --- /dev/null +++ b/day_01.zig @@ -0,0 +1,61 @@ +const std = @import("std"); +const math = std.math; +const Result = @import("util/aoc.zig").Result; + +pub fn puzzle_1(input: []const u8) !Result { + var iter = std.mem.split(u8, input, "\n"); + var count: i32 = 0; + var max: i32 = 0; + + while (iter.next()) |line| { + if (line.len == 0) { + if (count > max) { + max = count; + } + count = 0; + } else { + count += try std.fmt.parseInt(i32, line, 0); + } + } + + return .{ .int = max }; +} + +pub fn puzzle_2(input: []const u8) !Result { + var iter = std.mem.split(u8, input, "\n"); + var count: i32 = 0; + var max: [3]i32 = std.mem.zeroes([3]i32); + + while (iter.next()) |line| { + if (line.len == 0) { + const lowest_u = min_idx(i32, &max); + if (count > max[lowest_u]) { + max[lowest_u] = count; + } + count = 0; + } else { + count += try std.fmt.parseInt(i32, line, 0); + } + } + + count = 0; + for (max) |v| { + count += v; + } + + return .{ .int = count }; +} + +fn min_idx(comptime T: type, slice: []const T) usize { + var best = slice[0]; + var idx: usize = 0; + + for (slice[1..]) |item, i| { + const possible_best = math.min(best, item); + if (best > possible_best) { + best = possible_best; + idx = i + 1; + } + } + return idx; +} -- cgit v1.2.3