Nadesłany przez Nikodem Solarz, 04 lutego 2013 13:32
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
data_wielkanocy.rb:
#====================================================== #**Implementacja algorytmu obliczania dnia wielkanocy #**Działa poprawnie w zakresie lat 1582-2499 #**W pozostałych latach obliczenie będzie błędne. #**Zwraca tablicę [dzień,miesiąc] wielkanocy #**Narzew #**04.02.2013 #**www.algorytm.org #====================================================== #====================================================== #**Metody pomocnicze #====================================================== $r = [[22,3],[23,3],[24,3],[25,3],[26,3],[27,3],[28,3],[29,3],[30,3],[31,3],[1,4],[2,4],[3,4],[4,4],[5,4],[6,4],[7,4],[8,4],[9,4],[10,4],[11,4],[12,4],[13,4],[14,4],[15,4],[16,4],[17,4],[18,4],[19,4],[20,4],[21,4],[22,4],[23,4],[24,4],[25,4],[26,4],[27,4],[28,4],[29,4],[30,4],[31,4]] def calc_ab(x) if x <= 1582 return [15,6] elsif x >= 1583 and x <= 1699 return [22,2] elsif x >= 1700 and x <= 1799 return [22,3] elsif x >= 1800 and x <= 1899 return [23,4] elsif x >= 1900 and x <= 2099 return [24,5] elsif x >= 2100 and x <= 2199 return [25,6] elsif x >= 2200 and x <= 2299 return [25,0] elsif x >= 2300 and x <= 2399 return [26,1] elsif x >= 2400 and x <= 2499 return [25,1] else return [0,0] end end #====================================================== #**Metoda właściwa #**x => rok #====================================================== def dzien_wielkanocy(x) big_a = calc_ab(x)[0] big_b = calc_ab(x)[1] a = x%19 b = x%4 c = x%7 d = (a*19+big_a)%30 e = (2*b+4*c+6*d+big_b)%7 w1 = d + e w2_day = $r[w1][0] w2_month = $r[w1][1] return [w2_day, w2_month] end