34 lines
969 B
Text
34 lines
969 B
Text
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)
|