diff --git a/src/days/day02.zig b/src/days/day02.zig index 8e45652..12f66ea 100644 --- a/src/days/day02.zig +++ b/src/days/day02.zig @@ -17,23 +17,44 @@ pub fn run(_: std.mem.Allocator) !void { std.debug.print("{d} to {d}\n", .{start, end}); - outer: for (start..end+1) |id| { + for (start..end+1) |id| { + std.debug.print("-- Checking {d} --\n", .{id}); + // IDs smaller than 10 cannot possibly have repeated digits - if (id / 10 == 0) continue; + if (id / 10 == 0) { + std.debug.print("Skipping {d}\n", .{id}); + continue; + } const len = getLen(id); - // Uneven numbers cannot consist of 2 sequences - if (len % 2 == 1) continue; + inner: for (2..len + 1) |divisor| { + if (len % divisor != 0) continue; - for (0..len / 2) |i| { - const a = getDigit(id, i); - const b = getDigit(id, i + len / 2); - if (a != b) { - continue :outer; + std.debug.print("divisor = {d}\n", .{divisor}); + + const window_len = len / divisor; + + std.debug.print("window_len = {d}\n", .{window_len}); + + for (0..window_len) |i| { + const a = getDigit(id, i); + std.debug.print("a = {d}\n", .{a}); + for (1..divisor) |n| { + const b = getDigit(id, i + window_len * n); + std.debug.print("b = {d}\n", .{b}); + if (a != b) { + continue :inner; + } + } } + // If we get here, it means id is a valid cadidate + std.debug.print("result = {d}\n", .{id}); + break; } accumulator += id; } + + break; } var buffer: [64]u8 = undefined;