Lua数组按指定顺序输出结果

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

-- 规则
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时,它将检查下一个立即的表以查看最后一个元素是否也为1;如果是,则将其删除并添加到六个元素中,这将使其变为七个元素,然后它将再次检查下一个立即的表以查看最后一个数字是否为1,如果是,则也删除它并添加到七个元素中,使其变为8.它将再次检查,如果返回到它离开的地方。 因此,在被删除的表中的元素变为五个。 因此,我希望他们也能够满足规则,即使所有五个元素都为1或0。 但似乎只有六个元素符合规则......

希望这很清楚 谢谢

点赞
用户6834680
用户6834680
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

-- 规则
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))
2018-12-03 12:54:59