Module:Mediants: Difference between revisions

Ganaram inukshuk (talk | contribs)
todo
Ganaram inukshuk (talk | contribs)
add sort function and convert-to-rational functions
Line 1: Line 1:
local rat  = require("Module:Rational")
local utils = require("Module:Utils")
local utils = require("Module:Utils")
local p = {}
local p = {}
-- TODO:
-- - Add a convert-to-rational function.
-- - Add sort function


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Line 22: Line 19:
end
end


-- Given a ratio, return its simplified form
-- Given a ratio, return its simplified form.
function p.simplify_ratio(ratio)
function p.simplify_ratio(ratio)
local gcd = utils._gcd(ratio[1], ratio[2])
local gcd = utils._gcd(ratio[1], ratio[2])
Line 28: Line 25:
end
end


-- Sort ratios in ascending order (TODO)
-- Sort ratios in ascending order. Comparison function is built-in.
function p.sort_ratios(ratios)
table.sort(ratios, function(ratio_1, ratio_2)
return ratio_1[1] / ratio_1[2] < ratio_2[1] / ratio_2[2]
end
)
end


-- Comparison function for use with Lua's sort function (TODO)
-- Given a single ratio, as a table of two numbers, convert to rational and
-- return it.
function p.to_rational(ratio)
return rat.new(ratio[1], ratio[2])
end
 
-- Given a table of ratios, each a table of two numbers, return an array of
-- ratios in the form as defined by module:Rational.
function p.to_rationals(ratios)
local rats = {}
for i = 1, #ratios do
table.insert(rats, p.to_rational(ratios[i]))
end
return rats
end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Line 196: Line 213:


function p.tester()
function p.tester()
return p.find_only_mediants_by_int_limit()
--return p.find_only_mediants_by_int_limit()
local ratios = {{4,3}, {5,1}, {3,2}}
p.sort_ratios(ratios)
return p.to_rationals(ratios)
end
end


return p
return p