const std = @import("std"); const Allocator = std.mem.Allocator; pub fn run(_: Allocator, input: []u8) !struct { u64, u64 } { var lines = std.mem.tokenizeScalar(u8, input, '\n'); var answer1: u64 = 0; var answer2: u64 = 0; while (lines.next()) |line| { answer1 += try calculateJoltage(line, 2); answer2 += try calculateJoltage(line, 12); } return .{ answer1, answer2 }; } fn calculateJoltage(line: []const u8, num_digits: usize) !u64 { var index: usize = 0; var value: usize = 0; var total: usize = 0; for (0..num_digits) |i| { const start = if (i == 0) 0 else index + 1; const end = line.len - (num_digits - i - 1); index = std.mem.indexOfMax(u8, line[start..end]) + start; value = try std.fmt.charToDigit(line[index], 10); total += value * std.math.pow(usize, 10, num_digits - i - 1); } return total; }