Index: 残局文料/lua_lib/常用库.lua ================================================================== --- 残局文料/lua_lib/常用库.lua +++ 残局文料/lua_lib/常用库.lua @@ -26,27 +26,48 @@ for o3_0 in o2(o1, o1_0, o2_0) do k1_0[#k1_0 + 1] = o3_0 end return k1_0 end -function d.历对(o1_0, o1) +--~ 排 +--~ 能 +function d.历排取一(o1_0, o1) + local k1 + for o2 = 1, #o1_0 do + --~ 值 + k1 = o1(k1, o1_0[o2]) + end + return k1 + end +--~ 对 +--~ 能 +function d.历对取一(o1_0, o1) + local k1, k2 + for o2, o2_0 in pairs(o1_0) do + --~ 键 + --~ 值 + k1, k2 = o1(k1, k2, o2, o2_0) + end + return k1, k2 + end +function d.历对(o1_0, o1, o2) local k1 local k1_0, k2_0 --~ 对 k1_0 = {} - for o2, o2_0 in pairs(o1_0) do + for o3, o2_0 in pairs(o1_0) do --~ 键 --~ 值 - k1, k2_0 = o1(o2, o2_0) + k1, k2_0 = o1(o3, o2_0, o2) if k1 then k1_0[k1] = k2_0 else end end return k1_0 end ---~ 表中值 +--~ 排中值 --~ 值类 --~ 办值的能 function d.操类(o1_0, o1, o2) if type(o1_0) == o1 then return o2(o1_0) @@ -194,23 +215,57 @@ --~ 数 --~ 右移几位 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 +--~ 键 +--~ 最大值 +--~ 键 +--~ 值 +function d.筛对中最大值(o1, o2, o3, o4) + if o2 == nil then + return o3, o4 + elseif o2 < o4 then + return o3, o4 + else + return o1, o2 + end + end +--~ 键 +--~ 最短键 +--~ 键 +--~ 值 +function d.筛对中最短键(o1, o2, o3, o4) + if o1 == nil then + return o3, o4 + elseif #o1 > #o3 then + return o3, o4 + else + return o1, o2 + end + end +--~ 最短文 +--~ 值 +function d.筛排中最短文(o1, o2) + if o1 == nil then + return o2 + elseif #o1 > #o2 then + return o2 + else + return o1 + end end --~ 内数 function d.to_uint64(o1) local uint64_pointer = ffi.new("uint64_t[1]", o1) return uint64_pointer[0] + end +--~ 键 +--~ 值 +--~ 要找的值 +function d.全等筛对中值(o1, o2, o3) + if o2 == o3 then + return o1, o2 + else + end end return d Index: 残局文料/残局改名.lua ================================================================== --- 残局文料/残局改名.lua +++ 残局文料/残局改名.lua @@ -39,15 +39,12 @@ end end end end --~ 各文件的卡对排 -function d.筛有效果卡的张数(o1_0) - local k1_8 - --~ 卡排 - k1_8 = f.历排(o1_0, d.筛有效果卡) - return #k1_8 +function d.筛有效果卡_一维(o1_0) + return f.历排(o1_0, d.筛有效果卡) end --~ 各文件的卡编排 function d.取卡对_一维(o1_0) return f.历排(o1_0, d.取卡对) end @@ -97,16 +94,43 @@ k1 = string.match(k1_0[1], "[0-9]") return k1 or 3 end --~ 卡对排 function d.荐名(o1_0) + local k1 --~ print(o1_0[1].name) --~ return o1_0[1] - d.荐字段名(o1_0) + --~ 名 + k1 = d.荐字段名(o1_0) + if k1 then + else + k1 = d.荐卡名(o1_0) + end + if k1 then + return k1 + else + return "请便" + end + end +function d.荐卡名(o1_0) + local k1_0 + --~ 卡名排 + k1_0 = d.取卡名排(o1_0) + return f.历排取一(k1_0, f.筛排中最短文) + end +--~ 卡对排 +function d.取卡名排(o1_0) + local k1_0 + --~ 卡名排 + k1_0 = {} + for o1 = 1, #o1_0 do + k1_0[o1] = o1_0[o1].name + end + return k1_0 end --~ 卡对排 -function d.荐字段名(o1_0) +function d.取字段对(o1_0) local k1, k2, k3, k4 local k1_0 --~ 字段对 k1_0 = {} for o1 = 1, #o1_0 do @@ -116,137 +140,106 @@ 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) + if k2 > 0xfff then + --~ 小字段号 + k4 = f.位和(k2, 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 - k1_0[k3] = 1 end else end else end end end end - --~ 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) - --~ print(f.位和(o1_0[o1].setcode, 0xffff)) - --~ if k1 > 0xfff then - --~ 字段名 - --~ k2 = 字段名对[k1] - --~ print(k1, k2) - --~ if k1_0[k2] then - --~ k1_0[k2] = k1_0[k2] + 1 - --~ else - --~ k1_0[k2] = 1 - --~ end - --~ end - --~ 小字段号 - --~ k1 = bit.band(o1_0[o1].setcode, 0xfff) - --~ 字段名 - --~ k2 = 字段名对[k1] - --~ if k1_0[k2] then - --~ k1_0[k2] = k1_0[k2] + 1 - --~ elseif k2 == nil then - --~ else - --~ k1_0[k2] = 1 - --~ end end - f.历对(k1_0, print) + return k1_0 + end +--~ 卡对排 +function d.荐字段名(o1_0) + local k1, k2 + local k1_0 + --~ 字段对 + k1_0 = d.取字段对(o1_0) + --~ f.历对(k1_0, print) + --~ 最大的字段名数量 + _, k1 = f.历对取一(k1_0, f.筛对中最大值) + --~ print(_, k1) + --~ 最高频字段名对 + k2_0 = f.历对(k1_0, f.全等筛对中值, k1) + --~ f.历对(k2_0, print) + --~ 最短的最高频字段 + k2 = f.历对取一(k2_0, f.筛对中最短键) + --~ print(k2) + if k2 then + return k2 + else + return false + end end --~ 目对 function d.残局改名(o1_0) - local k1_0, k2_0, k3_0, k4_0, k5_0, k6_0 - --~ 文件排 + local k1_0, k2_0, k3_0, k4_0, k5_0, k6_0, k7_0, k8_0 + --~ 文件名排 k1_0 = f.历文(o1_0.文件目, 简文件库.dir) k1_0 = f.历排(k1_0, f.全筛后缀, ".lua") - for o1 = 1, #k1_0 do - k1_0[o1] = f.加前缀(k1_0[o1], o1_0.文件目) - k1_0[o1] = f.读文件(k1_0[o1]) - k1_0[o1] = string.gsub(k1_0[o1], "%-%-" .. "%[(=*)%[" .. ".-" .. "%]%1%]", "") - k1_0[o1] = string.gsub(k1_0[o1], "%-%-" .. "[^\n]*", "") + --~ 文件排 + k2_0 = f.历排(k1_0, f.全筛后缀, ".lua") + for o1 = 1, #k2_0 do + k2_0[o1] = f.加前缀(k2_0[o1], o1_0.文件目) + k2_0[o1] = f.读文件(k2_0[o1]) + k2_0[o1] = string.gsub(k2_0[o1], "%-%-" .. "%[(=*)%[" .. ".-" .. "%]%1%]", "") + k2_0[o1] = string.gsub(k2_0[o1], "%-%-" .. "[^\n]*", "") end --~ 则数排 - k2_0 = f.历排(k1_0, d.局筛则数) + k3_0 = f.历排(k2_0, d.局筛则数) --~ 各文件的卡编排 - k3_0 = f.历排(k1_0, d.局筛卡编) + k4_0 = f.历排(k2_0, d.局筛卡编) _G.数据库 = 简数据库库.open(o1_0.数据库路) --~ 各文件的卡对排 - k4_0 = f.历排(k3_0, d.取卡对_一维) + k5_0 = f.历排(k4_0, d.取卡对_一维) + --~ 有效果卡的卡对排 + k6_0 = f.历排(k5_0, d.筛有效果卡_一维) + --~ print(k6_0[1][2].name) --~ 有效果卡的张数排 - k5_0 = f.历排(k4_0, d.筛有效果卡的张数) + k7_0 = f.历排(k6_0, table.maxn) --~ 荐名排 - k6_0 = f.历排(k4_0, d.荐名) - --~ print(k6_0[0]) + k8_0 = f.历排(k6_0, d.荐名) + for o1 = 1, #k1_0 do + print(k1_0[o1], k3_0[o1], k7_0[o1], k8_0[o1]) + --~ print(k5_0[o1], k6_0[o1]) + end + --~ k1 = 1 + --~ print(k2_0[k1], k5_0[k1], k6_0[k1]) --~ print(k5_0[2]) end d.目对 = { ["文件目"] = "../single/" , ["数据库路"] = [[D:\install\YGOPro\cards.cdb]] } -for o1_0, o2_0 in pairs(d.目对) do - d.目对[o1_0] = f.操类(o2_0, "string", u8) +for o1, o2 in pairs(d.目对) do + d.目对[o1] = f.操类(o2, "string", u8) end d.残局改名(d.目对) ADDED 残局文料/残局荐名.lua Index: 残局文料/残局荐名.lua ================================================================== --- /dev/null +++ 残局文料/残局荐名.lua @@ -0,0 +1,245 @@ +package.path = [[.\lua_lib\?.lua;]] .. package.path +package.cpath = [[.\lua_lib\?.dll;]] .. package.cpath +local 字集码互转库 = require("u8_to_a") +local u8 = 字集码互转库.u8_to_a +local f = require(u8("常用库")) +local 字段名对 = require(u8("字段名")) +local 简文件库 = require("lfs") +local 简数据库库 = require("lsqlite3") +local d = {} +do + local TYPE_SPELL = 0x2 + local TYPE_TRAP = 0x4 + local TYPE_EFFECT = 0x20 + local TYPE_PENDULUM = 0x1000000 + local 有效果卡的类排 = { + TYPE_SPELL + , TYPE_TRAP + , TYPE_EFFECT + } + local 无效果灵摆怪兽排 = { + 28363749 --火蛋白石头龙头领 + , 19474136 --曼陀林草龙 + , 17390179 --闪光之骑士 + , 83980492 --铜锣龙 + } + --~ 卡对 + function d.筛有效果卡(o1_4) + for o1 = 1, #有效果卡的类排 do + if bit.band(有效果卡的类排[o1], o1_4.type) == 0 then + else + return o1_4 + end + end + if bit.band(TYPE_PENDULUM, o1_4.type) == 0 then + else + if 无效果灵摆怪兽排[o1_4.id] then + else + return o1_4 + end + end + end + end +--~ 各文件的卡对排 +function d.筛有效果卡_一维(o1_0) + return f.历排(o1_0, d.筛有效果卡) + end +--~ 各文件的卡编排 +function d.取卡对_一维(o1_0) + return f.历排(o1_0, d.取卡对) + end +--~ 卡编 +function d.取卡对(o1) + local k1_0, k2_0 + --~ 卡文对 + k1_0 = d.取卡文(o1) + --~ 卡数据对 + k2_0 = d.取卡数据(o1) + return f.连两对(k1_0, k2_0) + end +--~ 卡编 +function d.取卡文(o1) + for o1_4 in 数据库:nrows("select * from texts where id = " .. o1) do + return o1_4 + end + end +--~ 卡编 +function d.取卡数据(o1) + for o1_4 in 数据库:nrows("select * from datas where id = " .. o1) do + --~ if o1_4.setcode > 0xffffffff then + --~ ffi = require("ffi") + --~ print(bit.tohex(o1_4.setcode, 16), o1_4.setcode, o1_4.setcode == 36592129229979791, bit.tohex(bit.rshift(o1_4.setcode, 31)), bit.tohex(bit.band(o1_4.setcode, 0xf)), string.format("%x", 36592129229979791 - 36592129229979791), bit.tohex(math.fmod(36592129229979791, 0xffff + 1)), math.fmod(36592129229979791, 0xffff + 1), ffi.new("uint64_t[1]", 36592129229979791)[0], tostring(36592129229979791) == tostring(o1_4.setcode), tonumber(tostring(o1_4.setcode)) == 36592129229979791, math.modf(36592129229979791 / (0xffff + 1)), bit.tohex(bit.band(o1_4.setcode - 4, ffi.new("uint64_t[1]", 0xffff)[0]))) + --~ print(string.format("%x", 36592129229979791 - 5)) + --~ else + --~ end + return o1_4 + end + end +--~ 文 +function d.局筛卡编(o1) + local k1_0 + --~ 卡编排 + k1_0 = f.历文(o1, string.gmatch, "[^\n]+") + k1_0 = f.历排(k1_0, string.match, "Debug%.AddCard.+") + return f.历排(k1_0, string.match, "[0-9]+") + end +--~ 文 +function d.局筛则数(o1) + local k1 + local k1_0 + --~ 则数排 + k1_0 = f.历文(o1, string.gmatch, "[^\n]+") + k1_0 = f.历排(k1_0, f.全筛前缀, "Debug.ReloadFieldBegin") + --~ 则数 + k1 = string.match(k1_0[1], "[0-9]") + return k1 or 3 + end +--~ 卡对排 +function d.荐名(o1_0) + local k1 + --~ print(o1_0[1].name) + --~ return o1_0[1] + --~ 名 + k1 = d.荐字段名(o1_0) + if k1 then + else + k1 = d.荐卡名(o1_0) + end + if k1 then + return k1 + else + return "请便" + end + end +function d.荐卡名(o1_0) + local k1_0 + --~ 卡名排 + k1_0 = d.取卡名排(o1_0) + return f.历排取一(k1_0, f.筛排中最短文) + end +--~ 卡对排 +function d.取卡名排(o1_0) + local k1_0 + --~ 卡名排 + k1_0 = {} + for o1 = 1, #o1_0 do + k1_0[o1] = o1_0[o1].name + end + return k1_0 + end +--~ 卡对排 +function d.取字段对(o1_0) + local k1, k2, k3, k4 + local k1_0 + --~ 字段对 + k1_0 = {} + for o1 = 1, #o1_0 do + --~ 字段数 + 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 + break + else + --~ 大字段号 + k2 = f.位和(k1, 0xffff) + k1 = f.位右移(k1, f.乘法(4, 4)) + --~ 字段名 + k3 = 字段名对[tonumber(k2)] + if k3 then + if k1_0[k3] then + k1_0[k3] = f.加法(k1_0[k3], 1) + else + k1_0[k3] = 1 + end + if k2 > 0xfff then + --~ 小字段号 + k4 = f.位和(k2, 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 + else + end + end + end + end + end + return k1_0 + end +--~ 卡对排 +function d.荐字段名(o1_0) + local k1, k2 + local k1_0 + --~ 字段对 + k1_0 = d.取字段对(o1_0) + --~ f.历对(k1_0, print) + --~ 最大的字段名数量 + _, k1 = f.历对取一(k1_0, f.筛对中最大值) + --~ print(_, k1) + --~ 最高频字段名对 + k2_0 = f.历对(k1_0, f.全等筛对中值, k1) + --~ f.历对(k2_0, print) + --~ 最短的最高频字段 + k2 = f.历对取一(k2_0, f.筛对中最短键) + --~ print(k2) + if k2 then + return k2 + else + return false + end + end +--~ 目对 +function d.残局改名(o1_0) + local k1_0, k2_0, k3_0, k4_0, k5_0, k6_0, k7_0, k8_0 + --~ 文件名排 + k1_0 = f.历文(o1_0.文件目, 简文件库.dir) + k1_0 = f.历排(k1_0, f.全筛后缀, ".lua") + --~ 文件排 + k2_0 = f.历排(k1_0, f.全筛后缀, ".lua") + for o1 = 1, #k2_0 do + k2_0[o1] = f.加前缀(k2_0[o1], o1_0.文件目) + k2_0[o1] = f.读文件(k2_0[o1]) + k2_0[o1] = string.gsub(k2_0[o1], "%-%-" .. "%[(=*)%[" .. ".-" .. "%]%1%]", "") + k2_0[o1] = string.gsub(k2_0[o1], "%-%-" .. "[^\n]*", "") + end + --~ 则数排 + k3_0 = f.历排(k2_0, d.局筛则数) + --~ 各文件的卡编排 + k4_0 = f.历排(k2_0, d.局筛卡编) + _G.数据库 = 简数据库库.open(o1_0.数据库路) + --~ 各文件的卡对排 + k5_0 = f.历排(k4_0, d.取卡对_一维) + --~ 有效果卡的卡对排 + k6_0 = f.历排(k5_0, d.筛有效果卡_一维) + --~ print(k6_0[1][2].name) + --~ 有效果卡的张数排 + k7_0 = f.历排(k6_0, table.maxn) + --~ 荐名排 + k8_0 = f.历排(k6_0, d.荐名) + for o1 = 1, #k1_0 do + print(字集码互转库.a_to_u8(k1_0[o1]), k3_0[o1], k7_0[o1], k8_0[o1]) + --~ print(k5_0[o1], k6_0[o1]) + end + --~ k1 = 1 + --~ print(k2_0[k1], k5_0[k1], k6_0[k1]) + --~ print(k5_0[2]) + end +d.目对 = { + ["文件目"] = "../single/" + , ["数据库路"] = [[D:\install\YGOPro\cards.cdb]] + } +for o1, o2 in pairs(d.目对) do + d.目对[o1] = f.操类(o2, "string", u8) + end +d.残局改名(d.目对)