table.from = function(f) local tbl = {} local i = 1 for v in f do tbl[i] = v i = i + 1 end return tbl end table.max = function(t) local maxk, maxv if type(t) == "table" then for k,v in pairs(t) do if not maxk or maxv < v then maxk = k maxv = v end end else for k,v in t do if not maxk or maxv < v then maxk = k maxv = v end end end return maxk, maxv end table.min = function(t) local mink, minv if type(t) == "table" then for k,v in pairs(t) do if not mink or minv > v then mink = k minv = v end end else for k,v in t do if not mink or minv > v then mink = k minv = v end end end return mink, minv end table.find = function(t, f) if type(t) == "table" then for k,v in pairs(t) do if f(k,v) then return k,v end end else for k,v in t do if f(k,v) then return k,v end end end end table.filter = function(t, f) if type(t) == "table" then local it = nil return function() while true do it = next(t, it) if not it then break elseif f(it,t[it]) then return it,t[it] end end end else return function() while true do local k,v = t() if not k then break elseif f(k,v) then return k,v end end end end end table.map = function(t, f) if type(t) == "table" then local it = nil return function() it = next(t, it) if it then return f(it, t[it]) end end else return function() local k,v = t() if k then return f(k,v) end end end end