Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- [[ worker.lua ]]
- local Worker = {
- ["Name"] = "Worker"
- }
- function Worker.new(class, name)
- return setmetatable({
- ClassName = rawget(class, "Name"),
- Name = name,
- Salary = 0,
- MonthsWorked = 0,
- Earnings = 0,
- }, class)
- end
- function Worker:IsA(class)
- if self.ClassName == class then
- return true
- else
- return false
- end
- end
- function Worker:GetPaid()
- self.Earnings = self.Earnings + self.Salary
- return self.Salary
- end
- function Worker:GetFired()
- self.Salary = 1000
- self.ClassName = "Unemployed"
- setmetatable(self, Unemployed)
- end
- Worker.__index = Worker
- -- [[ manager.lua ]]
- local Manager = {
- ["Name"] = "Manager"
- }
- function Manager:GetPromoted()
- if (math.random() <= 0.02) then
- self.Salary = self.Salary + 2000
- end
- end
- Manager.__index = Manager
- setmetatable(Manager, {__index = Worker})
- --[[ programmer.lua ]]
- local Programmer = {
- ["Name"] = "Programmer"
- }
- function Programmer:GetBonus()
- if (math.random() <= 0.1) then
- self.Salary = self.Salary + (math.random(1000, 4000) + 1000)
- end
- end
- Programmer.__index = Programmer
- setmetatable(Programmer, {__index = Worker})
- --[[ unemployed.lua ]]
- local Unemployed = {
- ["Name"] = "Unemployed"
- }
- function Unemployed:FindJob()
- if (math.random() <= 0.1) then
- self.ClassName = "Programmer"
- setmetatable(self, Programmer)
- end
- end
- Unemployed.__index = Unemployed
- setmetatable(Unemployed, {__index = Unemployed})
- --[[ start-work.lua ]]
- local PROJECT_NAME = "Working! Lab"
- local WORKER_COUNT = 20
- local MONTH_COUNT = 60
- local names = {"Kelley", "Savanna", "Tania", "Lilith", "Zoey", "Laney", "Lora", "Kim", "Ava", "Bess"}
- local workers = {}
- for i = 1, WORKER_COUNT do
- local name = names[math.random(1, #names)]
- local jobIndex = math.random()
- if (jobIndex <= 0.1) then
- table.insert(workers, Worker.new(Manager, name))
- elseif (jobIndex <= 0.8) then
- table.insert(workers, Worker.new(Programmer, name))
- else
- table.insert(workers, Worker.new(Unemployed, name))
- end
- end
- for month = 1, MONTH_COUNT do
- for index = 1, #workers do
- local worker = workers[index]
- if worker:IsA("Manager") then
- worker:GetPromoted()
- elseif worker:IsA("Programmer") and (month % 12 == 0) then
- worker:GetBonus()
- else
- worker:FindJob()
- end
- worker:GetPaid()
- end
- end
- print("Over the duration of "..tostring(MONTH_COUNT).." months, the following occured:")
- for index = 1, #workers do
- print(self.Name.. ", a "..self.ClassName..", made "..tostring(self.Earnings).." with her final salary of "..tostring(self.Salary).."!")
- print("She worked "..tostring(math.floor((self.MonthsWorked / MONTH_COUNT) * 100) / 100).." percent of the time.")
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement