50 lines
1.1 KiB
Lua
50 lines
1.1 KiB
Lua
-- Task 1
|
|
function sternBrocot (n)
|
|
local sbList, pos, c = {1, 1}, 2
|
|
repeat
|
|
c = sbList[pos]
|
|
table.insert(sbList, c + sbList[pos - 1])
|
|
table.insert(sbList, c)
|
|
pos = pos + 1
|
|
until #sbList >= n
|
|
return sbList
|
|
end
|
|
|
|
-- Return index in table 't' of first value matching 'v'
|
|
function findFirst (t, v)
|
|
for key, value in pairs(t) do
|
|
if v then
|
|
if value == v then return key end
|
|
else
|
|
if value ~= 0 then return key end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- Return greatest common divisor of 'x' and 'y'
|
|
function gcd (x, y)
|
|
if y == 0 then
|
|
return math.abs(x)
|
|
else
|
|
return gcd(y, x % y)
|
|
end
|
|
end
|
|
|
|
-- Check GCD of adjacent values in 't' up to 1000 is always 1
|
|
function task5 (t)
|
|
for pos = 1, 1000 do
|
|
if gcd(t[pos], t[pos + 1]) ~= 1 then return "FAIL" end
|
|
end
|
|
return "PASS"
|
|
end
|
|
|
|
-- Main procedure
|
|
local sb = sternBrocot(10000)
|
|
io.write("Task 2: ")
|
|
for n = 1, 15 do io.write(sb[n] .. " ") end
|
|
print("\n\nTask 3:")
|
|
for i = 1, 10 do print("\t" .. i, findFirst(sb, i)) end
|
|
print("\nTask 4: " .. findFirst(sb, 100))
|
|
print("\nTask 5: " .. task5(sb))
|