Finish day03, part 2

This commit is contained in:
ktkk 2025-12-03 16:26:38 +00:00
parent 0413ad2b9f
commit 0eeca85635

View file

@ -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;
}