RosettaCodeData/Task/Nonoblock/Pluto/nonoblock.pluto
2026-04-30 12:34:36 -04:00

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)