diff --git a/src/days/day03.zig b/src/days/day03.zig index 34f4449..de49283 100644 --- a/src/days/day03.zig +++ b/src/days/day03.zig @@ -6,35 +6,33 @@ pub fn run(_: std.mem.Allocator) !void { const input = @embedFile("./input/day03.txt"); var lines = std.mem.tokenizeScalar(u8, input, '\n'); - var accumulator: u32 = 0; + var accumulator: u64 = 0; + + const nr_of_digits = 12; while (lines.next()) |line| { - var first_digit: u8 = 0; - var first_digit_index: usize = 0; - for (line[0..line.len - 1], 0..) |c, i| { - const digit = try std.fmt.charToDigit(c, 10); - if (digit > first_digit) { - first_digit = digit; - first_digit_index = i; - } - } - std.debug.print("first = {d}\n", .{first_digit}); + var joltage: u64 = 0; - var second_digit: u8 = 0; - if (first_digit_index == line.len - 2) { - const c = line[line.len - 1]; - second_digit = try std.fmt.charToDigit(c, 10); - } else { - for (line[first_digit_index + 1..]) |c| { - const digit = try std.fmt.charToDigit(c, 10); - if (digit > second_digit) { - second_digit = digit; + var start: usize = 0; + for (0..nr_of_digits) |i| { + const end = line.len - (nr_of_digits - i) + 1; + + std.debug.print("checking {d} to {d}\n", .{start, end}); + + var digit: u8 = 0; + for (line[start..end], start..) |c, di| { + const d = try std.fmt.charToDigit(c, 10); + if (d > digit) { + digit = d; + start = di + 1; } } - } - std.debug.print("second = {d}\n", .{second_digit}); + std.debug.print("digit = {d}\n", .{digit}); - const joltage = first_digit * 10 + second_digit; + joltage += digit * std.math.pow(u64, 10, nr_of_digits - (i + 1)); + } + + std.debug.print("joltage = {d}\n", .{joltage}); accumulator += joltage; }