Lua 数组按指定顺序打印结果

Lua arrays print results in specified order

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

如何达到要求的结果? table 可以包含六个以上的元素,但最初是六个。所以当所有元素都为1时,它会检查下一个立即数Table,看最后一个元素是否也是1;如果为真,它将删除它并添加到 6 中,使之成为 7,然后它将再次检查下一个立即数 table,如果最后一位数字为 1,如果为真,它也将其删除并添加到 7 中,使 8。它将再次检查如果 false return 到它离开的地方。所以这里删除元素的 table 变成了五个。 所以我希望如果五个元素都为1或0,他们也能满足规则。但似乎只有六个元素满足规则...

希望清楚谢谢

function table_merge(t1, t2)
   for _, v in ipairs(t2) do
      table.insert(t1, v)
   end
end

function getMaster(tbl, rules, w)
   local result = false
   for _, rule in ipairs(rules) do
      for i = 1, w do
         local v = tbl[i]
         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 width = #data[1]  -- assuming all data rows have the same width
   local master_keys = {}
   local master_values = {}
   local continue_idx = width + 1

   for i, tbl in ipairs(data) do
      for w = width, 1, -1 do
         if w >= continue_idx and tbl[w] == master_values[w] then
            table.insert(data[master_keys[w]], master_values[w])
            tbl[w] = nil
         else
            local master = getMaster(tbl, rules, w)
            if master then
               master_keys[w] = i
               master_values[w] = master
               continue_idx = w
            else
               continue_idx = w + 1
            end
            break
         end
      end
   end

   local result = {}
   for i, tbl in ipairs(data) 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 },
}

print(start(data, rules))