Jump to content

Module:Collatz sequence Generator

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by R1F4T (talk | contribs) at 09:27, 27 September 2024. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
--{{#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 = '<span style="background-color:#b3ffb3;">' .. result .. '</span>'
        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, "&#8594; " .. 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