12,872
edits
Falterfire (talk | contribs) (Added a fraction function) |
(Replace GCD function with an implementation of the Euclidean algorithm, so that fewer iterations occur when numbers differ greatly in magnitude) |
||
(6 intermediate revisions by one other user not shown) | |||
Line 178: | Line 178: | ||
if(maxDigits ~= nil and decimals > maxDigits) then | if(maxDigits ~= nil and decimals > maxDigits) then | ||
result = tonumber(string.format("%."..maxDigits.."f", result)) | result = string.format("%."..minDigits.."f", tonumber(string.format("%."..maxDigits.."f", result))) | ||
elseif(minDigits ~= nil and decimals < minDigits) then | elseif(minDigits ~= nil and decimals < minDigits) then | ||
result = string.format("%."..minDigits.."f", result) | result = string.format("%."..minDigits.."f", result) | ||
Line 208: | Line 208: | ||
for key, value in pairs(List) do | for key, value in pairs(List) do | ||
if (value == Item) then | if (value == Item) then | ||
return true | return true, key | ||
elseif (IgnoreCase and string.upper(value) == string.upper(Item)) then | elseif (IgnoreCase and string.upper(value) == string.upper(Item)) then | ||
return true | return true, key | ||
end | end | ||
end | end | ||
Line 270: | Line 270: | ||
end | end | ||
-- | -- Euclidean Greatest Common Divisor algorithm | ||
function p.gcd(a, b) | function p.gcd(a, b) | ||
if | if b ~= 0 then | ||
return a | return p.gcd(b, a % b) | ||
else | else | ||
return math.abs(a) | |||
end | end | ||
end | end | ||
Line 296: | Line 284: | ||
return p.formatnum(n/gcd)..'/'..p.formatnum(d/gcd) | return p.formatnum(n/gcd)..'/'..p.formatnum(d/gcd) | ||
end | end | ||
function p.timeString(timeInSeconds, shorten) | |||
local remain = timeInSeconds | |||
local days, hours, minutes = 0, 0, 0 | |||
local isShort = shorten | |||
local pieces = {} | |||
if remain >= 86400 then | |||
days = math.floor(remain / 86400) | |||
remain = remain - days * 86400 | |||
if isShort then | |||
table.insert(pieces, days..'d') | |||
elseif days > 1 then | |||
table.insert(pieces, days..' days') | |||
else | |||
table.insert(pieces, days..' day') | |||
end | |||
end | |||
if remain >= 3600 then | |||
hours = math.floor(remain / 3600) | |||
remain = remain - hours * 3600 | |||
if isShort then | |||
table.insert(pieces, hours..'h') | |||
elseif hours > 1 then | |||
table.insert(pieces, hours..' hours') | |||
else | |||
table.insert(pieces, hours..' hour') | |||
end | |||
end | |||
if remain >= 60 then | |||
minutes = math.floor(remain / 60) | |||
remain = remain - minutes * 60 | |||
if isShort then | |||
table.insert(pieces, minutes..'m') | |||
elseif minutes > 1 then | |||
table.insert(pieces, minutes..' minutes') | |||
else | |||
table.insert(pieces, minutes..' minutes') | |||
end | |||
end | |||
if remain > 0 then | |||
if isShort then | |||
table.insert(pieces, remain..'s') | |||
elseif remain > 1 then | |||
table.insert(pieces, remain..' seconds') | |||
else | |||
table.insert(pieces, remain..' second') | |||
end | |||
end | |||
return table.concat(pieces, ', ') | |||
end | |||
function p.fixPagename(pageName) | |||
local result = pageName | |||
result = string.gsub(result, "%%27", "'") | |||
result = string.gsub(result, "'", "'") | |||
return result | |||
end | |||
function p.tablesEqual(t1, t2) | |||
if p.tableCount(t1) ~= p.tableCount(t2) then return false end | |||
for i, val in p.skpairs(t1) do | |||
if type(val) ~= type(t2[i]) then | |||
return false | |||
elseif type(val) == 'table' then | |||
if not p.tablesEqual(val, t2[i]) then return false end | |||
elseif t2[i] ~= val then | |||
return false | |||
end | |||
end | |||
return true | |||
end | |||
return p | return p |