tracks/lua/exercises/luhn/example.lua in trackler-2.0.6.10 vs tracks/lua/exercises/luhn/example.lua in trackler-2.0.6.11
- old
+ new
@@ -1,43 +1,27 @@
-local Luhn = {}
-Luhn.__index = Luhn
-
-function Luhn:check_digit()
- return tonumber(self.s:sub(-1))
-end
-
-function Luhn:addends()
+local function addends(s)
local result = {}
- for i = #self.s, 1, -1 do
- local digit = tonumber(self.s:sub(i, i))
+ for i = #s, 1, -1 do
+ local digit = tonumber(s:sub(i, i))
if #result % 2 > 0 then digit = digit * 2 end
if digit > 9 then digit = digit - 9 end
table.insert(result, 1, digit)
end
return result
end
-function Luhn:checksum()
+local function checksum(s)
local checksum = 0
- for _, addend in ipairs(self:addends()) do
+ for _, addend in ipairs(addends(s)) do
checksum = checksum + addend
end
return checksum
end
-function Luhn:valid()
- return self:checksum() % 10 == 0
-end
-
-local function new(s)
- return setmetatable({ s = s }, Luhn)
-end
-
-local function create(s)
- local checksum = new(s .. '0'):checksum()
- return s .. tostring((10 - (checksum % 10)) % 10)
-end
-
return {
- new = new,
- create = create
+ valid = function(s)
+ s = s:gsub(' ', '')
+ if #s < 2 then return false end
+ if s:find('%D') then return false end
+ return checksum(s) % 10 == 0
+ end
}