reorg and add code for second edition
This commit is contained in:
79
10_greedy_algorithms/lua/set.lua
Normal file
79
10_greedy_algorithms/lua/set.lua
Normal file
@@ -0,0 +1,79 @@
|
||||
set = {}
|
||||
local mt = {__index = set}
|
||||
|
||||
function set.new(array)
|
||||
local s = {}
|
||||
if array ~= nil then
|
||||
for _, value in pairs(array) do
|
||||
s[value] = true
|
||||
end
|
||||
end
|
||||
return setmetatable(s, mt)
|
||||
end
|
||||
|
||||
function set:add(value)
|
||||
if value ~= nil then
|
||||
self[value] = true
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
function set:remove(value)
|
||||
if value ~= nil then
|
||||
self[value] = nil
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
function set:len()
|
||||
local len = 0
|
||||
for _ in pairs(self) do
|
||||
len = len + 1
|
||||
end
|
||||
return len
|
||||
end
|
||||
|
||||
function set.union(a, b)
|
||||
local result = set.new()
|
||||
for key in pairs(a) do
|
||||
result[key] = true
|
||||
end
|
||||
for key in pairs(b) do
|
||||
result[key] = true
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function set.difference(a, b)
|
||||
local result = set.new()
|
||||
for key in pairs(a) do
|
||||
result[key] = true
|
||||
end
|
||||
for key in pairs(b) do
|
||||
result[key] = nil
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function set.intersection(a, b)
|
||||
local result = set.new()
|
||||
for key in pairs(a) do
|
||||
result[key] = b[key]
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function set.tostring(s)
|
||||
local array = {}
|
||||
for key in pairs(s) do
|
||||
array[#array + 1] = tostring(key)
|
||||
end
|
||||
return "{" .. table.concat(array, ", ") .. "}"
|
||||
end
|
||||
|
||||
mt.__add = set.union
|
||||
mt.__sub = set.difference
|
||||
mt.__mul = set.intersection
|
||||
mt.__tostring = set.tostring
|
||||
|
||||
return set
|
||||
Reference in New Issue
Block a user