Index: 残局文料/lua_lib/常用库.lua ================================================================== --- 残局文料/lua_lib/常用库.lua +++ 残局文料/lua_lib/常用库.lua @@ -1,7 +1,8 @@ local d = {} local 简文件库 = require("lfs") +local ffi = require("ffi") --~ 排 --~ 办排中值的能 --~ 入参2 --~ 入参3 --~ 入参4 @@ -26,19 +27,20 @@ k1_0[#k1_0 + 1] = o3_0 end return k1_0 end function d.历对(o1_0, o1) - local k1_0, k2_0, k3_0 + local k1 + local k1_0, k2_0 --~ 对 k1_0 = {} - for o2_0, o3_0 in pairs(o1_0) do + for o2, o2_0 in pairs(o1_0) do --~ 键 --~ 值 - k2_0, k3_0 = o1(o2_0, o3_0) - if k2_0 then - k1_0[k2_0] = k3_0 + k1, k2_0 = o1(o2, o2_0) + if k1 then + k1_0[k1] = k2_0 else end end return k1_0 end @@ -187,13 +189,28 @@ --~ 左数 --~ 右数 function d.位和(o1, o2) return bit.band(o1, o2) end -do - local double_pointer = ffi.new("double[1]") - local uint64_pointer = ffi.cast("uint64_t*", double_pointer) - function d.double_to_uint64(o1) - +--~ 数 +--~ 右移几位 +function d.位右移(o1, o2) + return bit.rshift(o1, o2) + end +--~ 对 +function d.找对中最大值(o1_0) + local k1, k2 + k2 = -math.huge + for o1, o2 in pairs(o1_0) do + if k2 < o2 then + k1, k2 = o1, o2 + else + end end + return k1, k2 + end +--~ 内数 +function d.to_uint64(o1) + local uint64_pointer = ffi.new("uint64_t[1]", o1) + return uint64_pointer[0] end return d Index: 残局文料/残局改名.lua ================================================================== --- 残局文料/残局改名.lua +++ 残局文料/残局改名.lua @@ -103,24 +103,92 @@ --~ return o1_0[1] d.荐字段名(o1_0) end --~ 卡对排 function d.荐字段名(o1_0) - local k1, k2 + local k1, k2, k3, k4 local k1_0 --~ 字段对 k1_0 = {} for o1 = 1, #o1_0 do --~ 字段数 - k1 = f.double_to_uint64(o1_0[o1].setcode) - if k1 > 0xffff then + k1 = f.to_uint64(o1_0[o1].setcode) + if k1 > 0xffffFFFFffff then k1 = k1 - 1 + elseif k1 < 1 then else + for o2 = 1, 11112222 do + if k1 < 1 then + --~ f.历对(k1_0, print) + --~ print(3) + break + --~ return + else + --~ 大字段号 + k2 = f.位和(k1, 0xffff) + k1 = f.位右移(k1, f.乘法(4, 4)) + --~ print(k1, k2) + --~ 字段名 + k3 = 字段名对[tonumber(k2)] + --~ print(k3) + if k3 then + if k1_0[k3] then + k1_0[k3] = f.加法(k1_0[k3], 1) + else + k1_0[k3] = 1 + end + --~ 小字段号 + k4 = f.位和(k1, 0xfff) + k3 = 字段名对[tonumber(k4)] + if k3 then + if k1_0[k3] then + k1_0[k3] = f.加法(k1_0[k3], 1) + else + k1_0[k3] = 1 + end + else + end + else + end + end + end end - --~ for o2 = 1, 11112222 do - --~ 大字段号 - --~ k1 = f.位和(o1_0[o1].setcode, 0xffff) + --~ print(string.format("%x", k1)) + --~ for o2 = 1, 6 do + --~ print(k1) + --~ if k1 < 1 then + --~ f.历对(k1_0, print) + --~ print(23) + --~ return + --~ else + --~ 大字段号 + --~ k2 = f.位和(k1, 0xffff) + --~ k1 = f.位右移(k1, f.乘法(4, 4)) + --~ 字段名 + --~ k3 = 字段名对[k2] + --~ if k3 then + --~ if k1_0[k3] then + --~ k1_0[k3] = f.加法(k1_0[k3], 1) + --~ else + --~ k1_0[k3] = 1 + --~ end + --~ 小字段号 + --~ k4 = f.位和(k1, 0xfff) + --~ k3 = 字段名对[k4] + --~ if k3 then + --~ if k1_0[k3] then + --~ k1_0[k3] = f.加法(k1_0[k3], 1) + --~ else + --~ k1_0[k3] = 1 + --~ end + --~ else + --~ end + --~ else + --~ end + --~ end + + --~ print(k1, k2) --~ k2 = --~ end --~ 大字段号 --~ k1 = bit.band(o1_0[o1].setcode, 0xffff) --~ print(o1_0[o1].setcode) @@ -144,10 +212,11 @@ --~ elseif k2 == nil then --~ else --~ k1_0[k2] = 1 --~ end end + f.历对(k1_0, print) end --~ 目对 function d.残局改名(o1_0) local k1_0, k2_0, k3_0, k4_0, k5_0, k6_0 --~ 文件排