require "table2" local function gen_sequence(ones, num_zeros) if #ones == 0 then return {string.rep("0", num_zeros)} end local result = {} for x = 1, num_zeros - #ones + 1 do local skip_one = ones:slice(2) for gen_sequence(skip_one, num_zeros - x) as tail do result:insert(string.rep("0", x) .. ones[1] .. tail) end end return result end local function print_block(data, len) local a = data:split("") local sum_bytes = 0 if #a > 0 then sum_bytes = table.sum(a:mapped(|c| -> c:byte() - 48)) end print($"\nblocks \{{a:concat(", ")}}, cells {len}") if len - sum_bytes <= 0 then print("No solution") return end local prep = a:mapped(|c| -> string.rep("1", c:byte() - 48)) for gen_sequence(prep, len - sum_bytes + 1) as r do print(r:sub(2)) end end print_block("21", 5) print_block("", 5) print_block("8", 10) print_block("2323", 15) print_block("23", 5)