Módulo:Ano: mudanças entre as edições
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 = { | |||
{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 | end | ||
-- | -- Tabela com dias da semana em português | ||
local dias_semana = { | 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 | -- Função principal | ||
function p.descricao(frame) | 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 | 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