分析规律(下图为11行-5列示例)
- 同颜色数字相差值为
列数-1
- 可以产生
(行数+列数-1)
组数字(如图是15)- 每组数字中,每一行最多只有一个(同行号应舍去)
function formatVal(val)
if val < 10 then return " " .. tostring(val) end
return tostring(val)
end
local cols = 5
local rows = 11
local t = {}
local gap = " "
for r = 1, rows do
local line = ""
for c = 1, cols do
local val = (r - 1) * cols + c
table.insert(t, val, val)
line = line .. " " .. formatVal(val)
end
print(line)
end
function SplitBySlash(t, cols, rows)
local arr2 = {}
local offset = cols - 1
for c = 1, rows + cols - 1 do
local arr = {}
for r = 1, rows do
local n = c + (r - 1) * offset
local fakeR = math.ceil(n / cols)
if fakeR == r then
table.insert(arr, n)
print(n, r, fakeR)
end
end
print("================")
table.insert(arr2, arr)
end
return arr2
end
local function __dump(var, level)
local rval = {}
table.insert(rval, "{")
for k, v in pairs(var) do
if type(v) == "table" and getmetatable(var) ~= v then
if k ~= "__base" then
table.insert(rval, string.format("%s%s=%s",
string.rep(" ", level), k,
__dump(v, level + 1)))
end
elseif type(v) ~= "function" then
table.insert(rval, string.format("%s%s=%s",
string.rep(" ", level), k,
tostring(v)))
end
end
table.insert(rval, string.format("%s}", string.rep(" ", level - 1)))
return table.concat(rval, "\n")
end
local function log(inst)
if inst == nil then
print(nil)
return
end
print(__dump(inst, 1))
end
local array2 = SplitBySlash(t, cols, rows)
log(array2)
最终效果