Книга: Программирование на языке Ruby

7.4. Определение даты Пасхи

7.4. Определение даты Пасхи

Дату этого праздника всегда было сложно вычислить, так как она привязана к лунному календарю. Солнечный год не делится нацело на лунные месяцы, поэтому даты, основанные на таком исчислении времени, будут из года в год меняться.

Представленный ниже алгоритм хорошо известен с давних времен. Мы видели его реализацию на языках BASIC, Pascal и С. А теперь перевели и на Ruby:

def easter(year)
 с = year/100
 n = year - 19*(year/19)
 k = (c-17)/25
 i = с - c/4 - (c-k)/3 + 19*n + 15
 i = i - 30*(i/30)
 i = i - (i/28)* (1 -(i/28)*(29/(i + 1))*((21-n)/11))
 j = year + year/4 + i + 2 - с + c/4
 j = j - 7*(j/7)
 l = i - j
 month = 3 + (1+40)/44
 day = l + 28 — 31*(month/4)
 [month, day]
end
date = easter 2001   # Найти месяц и день для 2001 года,
date = [2001] + date # Добавить в начало год.
t = Time.local *date # Передать параметры Time.local.
puts t               # Sun Apr 15 01:00:00 GMT-8:00 2001

Кто-то, прочитав этот раздел о Пасхе, непременно спросит: «Церковная или астрономическая?» Честно говоря, не знаю. Если вам удастся выяснить, сообщите всем нам.

Я бы с удовольствием объяснил вам этот алгоритм, только вот сам его не понимаю… Что-то надо принимать на веру, а в данном случае это особенно уместно!

Оглавление книги

Оглавление статьи/книги

Генерация: 1.266. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз