const std = @import("std"); const print = std.debug.print; pub fn solve(part: []u8, reader: *std.Io.Reader, _: std.mem.Allocator) !void { if (std.mem.eql(u8, part, "1")) { try part1(reader); } else { try part2(reader); } } fn part1(reader: *std.Io.Reader) !void { var output: usize = 0; while (reader.takeDelimiter('\n')) |line| { if (line.?.len == 0){ break; } var max1: usize = 0; var in1: usize = 0; var max2: usize = 0; for (line.?, 0..) |b, index| { const value: u8 = b - '0'; if (value > max1) { max2 = max1; max1 = value; in1 = index; } else if (value > max2) { max2 = value; } } if (in1 < line.?.len - 1){ max2 = 0; for (line.?[in1 + 1..]) |b| { const value: u8 = b - '0'; if (value > max2) { max2 = value; } } output += max1 * 10 + max2; } else { output += max2 * 10 + max1; } } else |_| { } print("{d}\n", .{output}); } fn part2(reader: *std.Io.Reader) !void { var output: usize = 0; while (reader.takeDelimiter('\n')) |line| { var joltage: usize = 0; if (line.?.len == 0){ break; } var last_index: usize = 0; for (0..12) |i| { var max: usize = 0; var max_index: usize = 0; for (line.?[last_index .. line.?.len - 11 + i], 0..) |b, index| { const value: u8 = b - '0'; if (value > max) { max = value; max_index = index; } } last_index += max_index + 1; joltage *= 10; joltage += max; } output += joltage; } else |_| { } print("{d}\n", .{output}); }