Padovan sequence: Difference between revisions
Content added Content deleted
No edit summary |
No edit summary |
||
Line 1,895: | Line 1,895: | ||
=={{header|Lua}}== |
|||
{{trans|Perl}} |
|||
<syntaxhighlight lang="Lua">-- Define the constants |
|||
local p = 1.32471795724474602596 |
|||
local s = 1.0453567932525329623 |
|||
-- Generator for the Padovan sequence using coroutines |
|||
function pad_recur_gen(n) |
|||
local co = coroutine.create(function () |
|||
local p = {1, 1, 1, 2} |
|||
for i = 1, n do |
|||
local next_val = p[2] + p[3] |
|||
coroutine.yield(p[1]) |
|||
table.remove(p, 1) |
|||
table.insert(p, next_val) |
|||
end |
|||
end) |
|||
return function () -- iterator |
|||
local status, value = coroutine.resume(co) |
|||
return value |
|||
end |
|||
end |
|||
-- Padovan floor function |
|||
function pad_floor(index) |
|||
if index < 3 then |
|||
return math.floor(1/2 + p) |
|||
else |
|||
return math.floor(1/2 + p^(index - 2) / s) |
|||
end |
|||
end |
|||
local l, m, n = 10, 20, 32 |
|||
local pr = {} |
|||
local pad_recur = pad_recur_gen(n) |
|||
for i = 1, n do |
|||
pr[i] = pad_recur() |
|||
end |
|||
for i = 1, m do |
|||
io.write(pr[i] .. ' ') |
|||
end |
|||
io.write('\n') |
|||
local pf = {} |
|||
for i = 1, n do |
|||
pf[i] = pad_floor(i) |
|||
end |
|||
for i = 1, m do |
|||
io.write(pf[i] .. ' ') |
|||
end |
|||
io.write('\n') |
|||
local L = {'A'} |
|||
local rules = { A = 'B', B = 'C', C = 'AB' } |
|||
for i = 1, n do |
|||
local next_str = '' |
|||
for char in L[#L]:gmatch('.') do |
|||
next_str = next_str .. rules[char] |
|||
end |
|||
table.insert(L, next_str) |
|||
end |
|||
for i = 1, l do |
|||
io.write(L[i] .. ' ') |
|||
end |
|||
io.write('\n') |
|||
for i = 1, n do |
|||
assert(pr[i] == pf[i] and pr[i] == #L[i], |
|||
"Uh oh, n=" .. i .. ": " .. pr[i] .. " vs " .. pf[i] .. " vs " .. #L[i]) |
|||
end |
|||
print('100% agreement among all 3 methods.')</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
1 1 1 2 2 3 4 5 7 9 12 16 21 28 37 49 65 86 114 151 |
|||
1 1 1 2 2 3 4 5 7 9 12 16 21 28 37 49 65 86 114 151 |
|||
A B C AB BC CAB ABBC BCCAB CABABBC ABBCBCCAB |
|||
100% agreement among all 3 methods. |
|||
</pre> |
|||