const std = @import("std"); const Record = struct { map: []const u8, damaged: std.ArrayList(u8) }; pub fn main() !void { const content = @embedFile("test.txt"); var lines = std.mem.split(u8, content, "\n"); var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); var records = std.ArrayList(Record).init(allocator); defer records.deinit(); // parse lines while (lines.next()) |line| { if (line.len < 1) { break; } var parts = std.mem.split(u8, line, " "); const map = parts.next().?; var damageIterator = std.mem.split(u8, parts.next().?, ","); var damaged = std.ArrayList(u8).init(allocator); while (damageIterator.next()) |d| { const parsed = try std.fmt.parseInt(u8, d, 10); try damaged.append(parsed); } try records.append(Record{ .map = map, .damaged = damaged }); } std.debug.print("records: {any}\n", .{records.items}); var part1: u8 = 0; for (records.items) |r| { // var all = std.ArrayList(u8).init(allocator); const all = allArrangements(r.map, r.damaged, 0); std.debug.print("all arrangements: {any}\n", .{all}); // part1 += numValid(r); } std.debug.print("Part1: {d}\n", .{part1}); } // replaces ?s with every possible combination of . or # // fn allArrangements(r: Record, i: u8) []const u8 { fn allArrangements(map: []const u8, damaged: std.ArrayList(u8), start: u8) []const u8 { std.debug.print("allArrangements. map: {any} damage: {any} start: {any}\n", .{ map, damaged, start }); // find the first ? const idx = std.mem.indexOf(u8, map, "?"); if (idx == null) { return map; } var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); var records = std.ArrayList(Record).init(allocator); defer records.deinit(); var one: [map.len]u8 = undefined; @memcpy(one, map); std.debug.print("? idx: {?d}\n", .{idx}); return &[_]u8{1}; } fn numValid(r: Record) u8 { // var gpa = std.heap.GeneralPurposeAllocator(.{}){}; // const allocator = gpa.allocator(); // // // generate all possible arrangements // var all = std.ArrayList(u8).init(allocator); // defer all.deinit(); const num = numQuestionMarks(r.map); std.debug.print("num ?: {d}\n", .{num}); return num; } fn numQuestionMarks(str: []const u8) u8 { var i: u8 = 0; for (str) |char| { if (char == '?') { i += 1; } } return i; }