Ruby calculando o dia da Páscoa
Posted: abril 10th, 2009 | Author: Carlan Calazans | Tags: aprendizado, dev, dica, rapidinha, ruby, ubuntu | No Comments »A Páscoa é uma data comemorativa que serve de referência para datas comemorativas móveis como Carnaval, Quaresma, Corpus Christ e outras. Por isso é importante saber quando a Páscoa vai ser comemorada. Além de interessante, serve como uma brincadeira para os garotos(as) de programa de plantão que não tem nada para fazer no feriado.
Cálculo
No total são três formas de calcular a data da Páscoa. A primeira é recorrendo a uma tabela, a segunda é através ao algorítimo de Gauss para o intervalo de anos que se inicia em 1900 e termina em 2099 e a terceira com o algorítimo de Meeus / Jones / Butcher. Como exemplo, optei pela segunda forma por ter umas condições e por ela ser mais elaborada. Para quem se interessar, os algorítimos serão relacionados no final deste texto.
require 'date'
FIELDS = %w{Carnaval Pascoa Corpus\ Christ}
ano = 2009 #change me
x = 24
y = 5
a = ano % 19
b = ano % 4
c = ano % 7
d = (19 * a + x) % 30
e = (2 * b + 4 * c + 6 * d + y) % 7
if (d + e > 9)
#april
dia = d + e - 9
mes = 4
#exceptions
dia = 19 if (dia == 26)
dia = 18 if (dia == 25 && d == 28 && a > 10)
else
#march
dia = d + e + 22
mes = 3
end
dt = Date.new(ano, mes, dia)
result = []
result << dt - 47
result << dt
result << dt + 60
FIELDS.each do |d|
puts "#{d}: #{result.shift.strftime("%d-%m-%Y")}"
end
Este texto tem uma pegadinha. Na verdade, meu intuito com ele não é ensinar Ruby nem mostrar como se calcula o dia da Páscoa. Foi uma forma que encontrei de mostrar como a linguagem chega perto do idioma, como poucas linguagens o fazem. Qualquer pessoa é capaz de entender as fórmulas matemáticas e relacioná-las com o exemplo mostrado. Sim, existe um açúcar, mas é fácil de entendê-lo também.
A maior parte do tempo, parece que estamos conversando com um editor de textos.
Leave a Reply