algorytm.org

Implementacja w Ruby



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Wyznaczanie daty Wielkanocy - algortym Gaussa - Implementacja w Ruby
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
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
Dodaj komentarz