90 lines
1.4 KiB
Lua
90 lines
1.4 KiB
Lua
function split(text, sep)
|
|
local parts = {}
|
|
local start = 0
|
|
local from, to = text:find(sep)
|
|
while from ~= nil do
|
|
table.insert(parts, text:sub(start, from - 1))
|
|
text = text:sub(to + 1)
|
|
from, to = text:find(sep)
|
|
end
|
|
table.insert(parts, text)
|
|
return parts
|
|
end
|
|
|
|
function sign(n)
|
|
if n == 0 then return 0
|
|
elseif n < 0 then return -1
|
|
else return 1
|
|
end
|
|
end
|
|
|
|
function foreach(t, f)
|
|
for k, v in pairs(t) do
|
|
t[k] = f(v)
|
|
end
|
|
end
|
|
|
|
function printtable(t, nonewline)
|
|
for k, v in pairs(t) do
|
|
io.write(k..":")
|
|
if type(v) == "table" then
|
|
io.write("(")
|
|
printtable(v, true)
|
|
io.write(") ")
|
|
else
|
|
io.write(tostring(v).." ")
|
|
end
|
|
end
|
|
if not nonewline then
|
|
io.write("\n")
|
|
end
|
|
end
|
|
|
|
function count(t, pred)
|
|
local count = 0
|
|
for k, v in pairs(t) do
|
|
if pred(v) then count = count + 1 end
|
|
end
|
|
return count
|
|
end
|
|
|
|
function foldl(t, f, a)
|
|
for k, v in pairs(t) do
|
|
a = f(a, v)
|
|
end
|
|
return a
|
|
end
|
|
|
|
function sum(t)
|
|
return foldl(t, function (x, y) return x + y end, 0)
|
|
end
|
|
|
|
function char(s, index)
|
|
return string.char(string.byte(s, index))
|
|
end
|
|
|
|
function chars(s)
|
|
local index = 0
|
|
return function()
|
|
if index < #s then
|
|
index = index + 1
|
|
return char(s, index)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function bin2dec(str)
|
|
local v = 0
|
|
for c in chars(str) do
|
|
v = v * 2
|
|
if c == "1" then v = v + 1 end
|
|
end
|
|
return v
|
|
end
|
|
|
|
function euler(n)
|
|
return n * (n + 1) / 2
|
|
end
|