const std = @import("std"); const path = "data/day08/input.txt"; const RetType = u20; const pattern_pieces = 10; const output_pieces = 4; const input_lines = 200; const InputLine = struct { patterns: [pattern_pieces][]u8, outputs: [output_pieces][]u8, five_len: [3][]u8, // 2, 3, 5 six_len: [3][]u8, // 0, 6, 9 }; const FullInput = [input_lines]InputLine; fn parseInput() anyerror!FullInput { const input = @embedFile(path); var lines = std.mem.tokenize(u8, input, "\n"); var inl: FullInput = undefined; // THIS IS THE RIGHT PLACE FOR THE BUFFER var buffer: [input_lines][output_pieces + pattern_pieces][7]u8 = undefined; var i: usize = 0; while (lines.next()) |line| : (i += 1) { var pattern_output = std.mem.tokenize(u8, line, "|"); _ = std.mem.tokenize(u8, pattern_output.next().?, " "); var outs = std.mem.tokenize(u8, pattern_output.next().?, " "); // collect outs var idx: usize = 0; while (outs.next()) |out| : (idx += 1) { // THIS IS BAD: inl[i].outputs[idx] points to nowhere outside the block // var buffer: [7]u8 = undefined; // inl[i].outputs[idx] = buffer[0..out.len]; inl[i].outputs[idx] = buffer[i][idx][0..out.len]; std.mem.copy(u8, inl[i].outputs[idx], out); std.sort.sort(u8, inl[i].outputs[idx], {}, comptime std.sort.asc(u8)); } // collect patterns (removed for brevity) } return inl; } pub fn main() anyerror!void { var input = try parseInput(); for (input) |line| { for (line.outputs) |out| { std.debug.print("{s} ", .{out}); } std.debug.print("\n", .{}); } }