map = {["#326"]={A={66,66},B={95,95},H={98,98},P={96,96},X={76,76}},["#327"]={A={82,82},B={82,82},H={95,95},P={54,54},X={88,88}},["#328"]={A={59,59},B={64,64},H={93,93},P={58,58},X={80,80}}} allletters = {} outmap = {} for feature, submap in pairs(map) do f = otherresults[feature] if f == nil then error("Need recalc, waiting for "..feature) end _, _, value = string.find(f, ": ([0-9.]+)") if value ~= nil then value = tonumber(value) for letter, range in pairs(submap) do allletters[letter] = true if value < range[1] or value > range[2] then outmap[letter] = true -- can't be this letter end end end end candidates = {} for letter, _ in pairs(allletters) do if not outmap[letter] then table.insert(candidates, letter) end end if #candidates ~= 0 then return "Candidates: "..table.concat(candidates, ", ") end