const std = @import("std"); pub fn main() void { const input = @embedFile("input.asc"); std.debug.print("Part 1: {}\n", .{findDisctinctSubstrIdx(input, 4)}); std.debug.print("Part 2: {}\n", .{findDisctinctSubstrIdx(input, 14)}); } fn findDisctinctSubstrIdx(input: []const u8, n: usize) usize { // Loop through all the groups of 4 var i: usize = n; group: while (i < input.len) : (i += 1) { const slice = input[(i - n)..i]; // See if each one of them is unique in smaller groups. // Ex.: is 1 in 234? -> is 2 in 34? -> is 3 in 4? var j: usize = 0; while (j < slice.len - 1) : (j += 1) { const needle = slice[j]; const haystack = slice[(j + 1)..]; for (haystack) |blade| { // We found a match, throw batch to garbage if (needle == blade) { // We know this character appears somewhere else in // the haystack. As long as this letter is here, this // n-letter work will be invalid. Skip ahead. i += j; continue :group; } } } // We found it, get out break; } return i; }