function table_merge(t1, t2)
for _, v in ipairs(t2) do
table.insert(t1, v)
end
end
function getMaster(tbl, rules)
local result = false
for _, rule in ipairs(rules) do
for i, v in ipairs(tbl) do
result = v
if tostring(v) ~= tostring(rule) then
result = false
break
end
end
if result then break end
end
return result
end
function start(data, rules)
local master_key, master_val
local _temp, continue = {}, true
for i, tbl in ipairs(data) do
local master = getMaster(tbl, rules)
if master and master ~= master_val then
continue = true
end
if continue then
if master then
master_key = i
master_val = master
elseif tbl[#tbl] == master_val then
tbl[#tbl] = nil
table.insert(_temp[master_key], master_val)
elseif master_key then
continue = false
end
end
_temp[i] = tbl
end
local result = {}
for i, tbl in ipairs(_temp) do
table_merge(result, tbl)
end
return table.concat(result, "")
end
-- RULES
local rules = { 0, 1}
local data = {
{ 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 1, 0 },
{ 0, 0, 0, 8, 1, 0 },
{ 1, 1, 1, 1, 8, 8 },
{ 0, 0, 0, 0, 0, 0 },
}
start(data, rules)
ВЫХОД:
000000001111100081111188000000
Ожидаемые результаты должны быть следующими:
000000001111110008111188000000
Как мне достичь требуемых результатов?таблица может содержать более шести элементов, но изначально это шесть.поэтому, когда все элементы равны 1, он проверит следующую непосредственную таблицу, чтобы увидеть, является ли последний элемент также одним;если true, он удаляет его и добавляет к шестерке, делающей семерку, затем он снова проверяет следующую непосредственную таблицу, если последняя цифра равна 1, если true, он также удаляет это и добавляет к семерке, делающей 8. Он проверяет снова, и еслиложное возвращение туда, где оно осталось.Таким образом, здесь таблица, элемент которой был удален, становится пятью.Поэтому я надеялся, что они могли бы удовлетворить этому правилу, даже если все пять элементов равны 1 или 0. Но кажется, что только шесть элементов удовлетворяют правилу ...
Надеюсь, это понятно Спасибо