Module:Collatz sequence Generator
Appearance
--{{#invoke:Sandbox/R1F4T|collatz|10}}
--this module generates the collatz sequence
local p = {}
function p.collatz(frame)
local n = tonumber(frame.args[1]) -- Get the input number
if not n or n < 1 then
return "Please provide a positive integer."
end
-- Get the bolding parameters (if "yes", bold even or odd numbers)
local oddBold = frame.args['odd-bold'] == "yes"
local evenBold = frame.args['even-bold'] == "yes"
local sequence = {}
-- Helper function to handle bolding and styling
local function maybe_bold(num, isInitial)
local result = tostring(num)
if isInitial then
-- Highlight the initial number with green color
result = result
elseif num % 2 == 0 and evenBold then
result = "'''" .. result .. "'''"
elseif num % 2 ~= 0 and oddBold then
result = "'''" .. result .. "'''"
end
return result
end
-- Add the first (starting) number to the sequence, which is highlighted in green
table.insert(sequence, maybe_bold(n, true))
-- Loop through the Collatz sequence
while n > 1 do
if n % 2 == 0 then
n = n / 2
else
n = 3 * n + 1
end
table.insert(sequence, "→ " .. maybe_bold(n, false)) -- Add each new number with an arrow and conditional bolding
end
return table.concat(sequence, " ") -- Return the formatted sequence
end
return p