Ocena użytkownikóww: ***** / 0
Nadesłany przez Nikodem Solarz, 04 lutego 2013 12:28
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.dzien_tyg_1_rb.rb:
#======================================================
#**Implementacja algorytmu sprawdzania dnia tygodnia na
#**podstawie roku,miesiąca i dnia
#**Metoda obliczająca
#**Narzew
#**04.02.2013
#**www.algorytm.org
#======================================================
#======================================================
#**Metoda pomocnicza
#======================================================
def jest_rokiem_przestepnym(x)
return true if x%4==0 and !(x%100==0)
return true if x%400==0
return false
end
#======================================================
#**Metoda właściwa
#======================================================
$week_table = [0,31,59,90,120,151,181,212,243,273,304,334] # Tablica dni roku
$mday = [31,29,31,30,31,30,31,31,30,31,30,31] # Tablica ilości dni w miesiącu (dla roku przestępnego)
def dzien_tygodnia(x,y,z)
m = y
m = 12 if m > 12
r = z
d = x
d = 1 if d <= 0
d = $mday[m-1] if d > $mday[m-1]
d = 28 if m == 2 and d == 29 and !(jest_rokiem_przestepnym(z))
yy = (r-1)%100
c = (r-1)-yy
g = yy + yy/4
firstday = (((((c/100)%4)*5)+g)%7)
yearday = $week_table[m-1] + d
if m >= 3 and jest_rokiem_przestepnym(r)
yearday += 1
end
weekday = (firstday+yearday-1)%7
return (weekday+1)
end