Módulo:Ano: mudanças entre as edições

De Grêmiopédia, a enciclopédia do Grêmio
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada)
Linha 3: Linha 3:
-- Converte número decimal em romano
-- Converte número decimal em romano
function p.toRoman(n)
function p.toRoman(n)
local romans = {
    local romans = {
{1000, 'M'}, {900, 'CM'}, {500, 'D'}, {400, 'CD'},
        {1000, 'M'}, {900, 'CM'}, {500, 'D'}, {400, 'CD'},
{100, 'C'}, {90, 'XC'}, {50, 'L'}, {40, 'XL'},
        {100, 'C'}, {90, 'XC'}, {50, 'L'}, {40, 'XL'},
{10, 'X'}, {9, 'IX'}, {5, 'V'}, {4, 'IV'}, {1, 'I'}
        {10, 'X'}, {9, 'IX'}, {5, 'V'}, {4, 'IV'}, {1, 'I'}
}
    }
local result = ''
    local result = ''
for _, pair in ipairs(romans) do
    for _, pair in ipairs(romans) do
while n >= pair[1] do
        while n >= pair[1] do
result = result .. pair[2]
            result = result .. pair[2]
n = n - pair[1]
            n = n - pair[1]
end
        end
end
    end
return result
    return result
end
end


-- Retorna o dia da semana em português
-- Tabela com dias da semana em português
local dias_semana = {
local dias_semana = {
["Sunday"] = "domingo",
    ["Sunday"] = "domingo",
["Monday"] = "segunda-feira",
    ["Monday"] = "segunda-feira",
["Tuesday"] = "terça-feira",
    ["Tuesday"] = "terça-feira",
["Wednesday"] = "quarta-feira",
    ["Wednesday"] = "quarta-feira",
["Thursday"] = "quinta-feira",
    ["Thursday"] = "quinta-feira",
["Friday"] = "sexta-feira",
    ["Friday"] = "sexta-feira",
["Saturday"] = "sábado"
    ["Saturday"] = "sábado"
}
}
-- Tabela com o gênero de cada dia da semana
local genero_dia = {
    ["domingo"] = "m",
    ["segunda-feira"] = "f",
    ["terça-feira"] = "f",
    ["quarta-feira"] = "f",
    ["quinta-feira"] = "f",
    ["sexta-feira"] = "f",
    ["sábado"] = "m"
}
-- Função para obter o artigo adequado
local function artigo_adequado(dia)
    return genero_dia[dia] == "m" and "um" or "uma"
end


-- Função principal
-- Função principal
function p.descricao(frame)
function p.descricao(frame)
local ano = tonumber(frame.args[1])
    local ano = tonumber(frame.args[1])
if not ano then return "Ano inválido." end
    if not ano then return "Ano inválido." end
 
    local romano = p.toRoman(ano)
 
    -- Checa se é ano bissexto
    local bissexto = (ano % 4 == 0 and (ano % 100 ~= 0 or ano % 400 == 0))
    local dias = bissexto and 366 or 365
    local semanas = math.floor(dias / 7)
 
    -- Calcula o dia da semana de início e fim
    local data_inicio = os.date("*t", os.time{year=ano, month=1, day=1})
    local data_fim = os.date("*t", os.time{year=ano, month=12, day=31})
    local dia_inicio = dias_semana[os.date("%A", os.time(data_inicio))]
    local dia_fim = dias_semana[os.date("%A", os.time(data_fim))]


local romano = p.toRoman(ano)
    local artigo_inicio = artigo_adequado(dia_inicio)
    local artigo_fim = artigo_adequado(dia_fim)
-- Checa se é ano bissexto
local bissexto = (ano % 4 == 0 and (ano % 100 ~= 0 or ano % 400 == 0))
local dias = bissexto and 366 or 365
local semanas = math.floor(dias / 7)


-- Calcula o dia da semana de início e fim
    -- Verifica se o ano é o ano corrente
local data_inicio = os.date("*t", os.time{year=ano, month=1, day=1})
    local ano_atual = tonumber(os.date("%Y"))
local data_fim = os.date("*t", os.time{year=ano, month=12, day=31})
    local frase
local dia_inicio = dias_semana[os.date("%A", os.time(data_inicio))]
    if ano == ano_atual then
local dia_fim = dias_semana[os.date("%A", os.time(data_fim))]
        frase = string.format("'''%d''' ('''%s''', na numeração romana) é um ano de '''%d dias''', do Calendário Gregoriano, tem %d semanas, com início em %s '''%s''' e término em %s '''%s'''.",
            ano, romano, dias, semanas,
            artigo_inicio, dia_inicio,
            artigo_fim, dia_fim
        )
    else
        frase = string.format("'''%d''' ('''%s''', na numeração romana) foi um ano de '''%d dias''', do Calendário Gregoriano, teve %d semanas, com início em %s '''%s''' e término em %s '''%s'''.",
            ano, romano, dias, semanas,
            artigo_inicio, dia_inicio,
            artigo_fim, dia_fim
        )
    end


return string.format("'''%d''' ('''%s''', na numeração romana) foi um ano de '''%d dias''', do Calendário Gregoriano, teve %d semanas, com início em uma '''%s''' e término em uma '''%s'''.",
    return frase
ano,
romano,
dias,
semanas,
dia_inicio,
dia_fim
)
end
end


return p
return p

Edição atual tal como às 00h31min de 23 de março de 2025

A documentação para este módulo pode ser criada em Módulo:Ano/doc

 local p = {} -- Converte número decimal em romano function p.toRoman(n) local romans = { {1000, 'M'}, {900, 'CM'}, {500, 'D'}, {400, 'CD'}, {100, 'C'}, {90, 'XC'}, {50, 'L'}, {40, 'XL'}, {10, 'X'}, {9, 'IX'}, {5, 'V'}, {4, 'IV'}, {1, 'I'} } local result = '' for _, pair in ipairs(romans) do while n >= pair[1] do result = result .. pair[2] n = n - pair[1] end end return result end -- Tabela com dias da semana em português local dias_semana = { ["Sunday"] = "domingo", ["Monday"] = "segunda-feira", ["Tuesday"] = "terça-feira", ["Wednesday"] = "quarta-feira", ["Thursday"] = "quinta-feira", ["Friday"] = "sexta-feira", ["Saturday"] = "sábado" } -- Tabela com o gênero de cada dia da semana local genero_dia = { ["domingo"] = "m", ["segunda-feira"] = "f", ["terça-feira"] = "f", ["quarta-feira"] = "f", ["quinta-feira"] = "f", ["sexta-feira"] = "f", ["sábado"] = "m" } -- Função para obter o artigo adequado local function artigo_adequado(dia) return genero_dia[dia] == "m" and "um" or "uma" end -- Função principal function p.descricao(frame) local ano = tonumber(frame.args[1]) if not ano then return "Ano inválido." end local romano = p.toRoman(ano) -- Checa se é ano bissexto local bissexto = (ano % 4 == 0 and (ano % 100 ~= 0 or ano % 400 == 0)) local dias = bissexto and 366 or 365 local semanas = math.floor(dias / 7) -- Calcula o dia da semana de início e fim local data_inicio = os.date("*t", os.time{year=ano, month=1, day=1}) local data_fim = os.date("*t", os.time{year=ano, month=12, day=31}) local dia_inicio = dias_semana[os.date("%A", os.time(data_inicio))] local dia_fim = dias_semana[os.date("%A", os.time(data_fim))] local artigo_inicio = artigo_adequado(dia_inicio) local artigo_fim = artigo_adequado(dia_fim) -- Verifica se o ano é o ano corrente local ano_atual = tonumber(os.date("%Y")) local frase if ano == ano_atual then frase = string.format("'''%d''' ('''%s''', na numeração romana) é um ano de '''%d dias''', do Calendário Gregoriano, tem %d semanas, com início em %s '''%s''' e término em %s '''%s'''.", ano, romano, dias, semanas, artigo_inicio, dia_inicio, artigo_fim, dia_fim ) else frase = string.format("'''%d''' ('''%s''', na numeração romana) foi um ano de '''%d dias''', do Calendário Gregoriano, teve %d semanas, com início em %s '''%s''' e término em %s '''%s'''.", ano, romano, dias, semanas, artigo_inicio, dia_inicio, artigo_fim, dia_fim ) end return frase end return p