Wielkanoc jest świętem ruchomym. Niedziela Wielkanocna wypada w pierwszą niedzielą, która następuje po pierwszej wiosennej pełni Księżyca. Zasadę tę ustalono w 325 roku podczas soboru nicejskiego. W konsekwencji powoduje to, że Wielkanoc może wypadać w okresie od 22 marca do 25 kwietnia. W dodatku dla uproszczenia przyjęto, że pierwszym dniem wiosny jest 21 marca. Jest to umowne, ponieważ astronomiczny pierwszy dzień wiosny to dzień zrównania dnia z nocą. 🌜 Aktualnie tym dniem jest 20 marca, a za kilkadziesiąt lat będzie 19 marca. Widzimy więc, że przyroda nie ułatwia nam zadania.

Pomińmy aspekty historyczne i astronomiczne. Skupmy się na najbliższych latach. Chcemy znaleźć prosty sposób na wyznaczanie kolejnych dat Świąt Wielkanocnych. Pomocną dłoń wyciąga pewien niemiecki matematyk, fizyk i astronom - Carl Friedrich Gauss. Prawie dwieście lat temu zbudował prosty algorytm, który pozwala określić datę Niedzieli Wielkanocnej.

Metoda Gaussa

  1. Należy liczbę roku podzielić modulo:
    • przez 19 i wynik nazwać a,
    • przez 4 i wynik nazwać b,
    • przez 7 i wynik nazwać c.
  2. Dla lat od 1900 do 2099 przyjmujemy, że:
    • k równe jest 24,
    • l równe jest 5.
  3. Wykonać wzór 19*a + k, a sumę podzielić modulo przez 30 i wynik nazwać d.
  4. Wykonać wzór 2*b + 4*c + 6*d + l, a sumę podzielić modulo przez i wynik nazwać e.
  5. Teraz do daty 22 marca należy dodać wyniki z punktu 3 i 4, czyli d + e.

Jest to bardzo uproszczona wersja tego algorytmu. Założyliśmy, że interesują nas tylko najbliższe lata. Nie uwzględniamy wyjątków. Chodzi o to, aby pokazać implementację tego algorytmu w Ruby i aby był to prosty program.

require 'date'

def easter_date(year, k = 24, l = 5)
  array = [year % 19, year % 4, year % 7]
  array[3] = (19*array[0] + k) % 30
  array[4] = (2*array[1] + 4*array[2] + 6*array[3] + l) % 7
  Date.new(year, 3, 22) + array[3] + array[4]
end

Zobaczmy jak działa nasza metoda dla aktualnego roku, lat przyszłych i przeszłych.

2.6.0 :009 > easter_date(2019)
 => #<Date: 2019-04-21 ((2458595j,0s,0n),+0s,2299161j)>
2.6.0 :010 > easter_date(2020)
 => #<Date: 2020-04-12 ((2458952j,0s,0n),+0s,2299161j)>
2.6.0 :011 > easter_date(2021)
 => #<Date: 2021-04-04 ((2459309j,0s,0n),+0s,2299161j)>
2.6.0 :012 > easter_date(2018)
 => #<Date: 2018-04-01 ((2458210j,0s,0n),+0s,2299161j)>
2.6.0 :013 > easter_date(2017)
 => #<Date: 2017-04-16 ((2457860j,0s,0n),+0s,2299161j)>
2.6.0 :014 > easter_date(2000)
 => #<Date: 2000-04-23 ((2451658j,0s,0n),+0s,2299161j)>

Z powyższych przykładów widzimy, że w aktualnym roku 2019 Wielkanoc przypada na 21 kwietnia. I z pełną świadomością możemy to potwierdzić. Za rok, czyli 2020 będzie to 12 kwietnia. A w 2021 Święta Wielkiejnocy wypadną dnia 4 kwietnia. Możemy również przypomnieć sobie zeszły rok. W 2018 roku Wielkanoc obchodziliśmy w Prima Aprilis, czyli 1 kwietnia. Cztery linijki kodu w Ruby (pomijając definiowanie metody) wystarcza do tego, aby uprościć sobie świąteczne plany.

Metoda Gaussa nie jest jedyną metodą wyliczania dat Wielkanocy. Istnieje również metoda Meeusa/Jonesa/Butchera. Ale zostawimy tą metodę na inny artykuł.

🐰 Wesołych Świąt 🐥

Drodzy czytelnicy! Wiemy, że są wśród Was nasi przyjaciele, współpracownicy i zleceniodawcy, nasi klienci oraz dostawcy. Część z Was korzysta z usług naszego serwisu komputerowego w Cieszynie. Inni za to zamawiają u nas aplikacje internetowe. Jeszcze inni to po prostu społeczności, w których działamy tj. CoderDojo, Rails Girls, czy lokalna grupa Rubiego. Dziękujemy, że z nami jesteście. To wiele dla nas znaczy.

Z okazji Świąt Wielkiejnocy życzymy Wam odrodzenia oraz regeneracji. Wiemy, że to brzmi bardzo technicznie, ale taki jest cel tych życzeń. Każdego laptopa da się naprawić. Każdą aplikację da się napisać. Jednak pamiętajcie, że technologia ma Wam ułatwiać życie, a nie je zastępować. Korzystajcie z niej mądrze i na miarę naszych czasów. To wspaniałe, że można zadzwonić do rodziny lub znajomych na drugim końcu świata nie ruszając się z domu. W dobie Internetu można wysłać komuś uśmiechnięte zdjęcie lub życzenia świąteczne w kilka sekund. Używajcie tych codziennych cudów techniki w wyjątkowy sposób. Sprawcie, aby te Święta Wielkanocy były wyjątkowe także dla innych. Podzielcie się z innymi radością i miłością. Niech technologia będzie po Waszej stronie. Razem zmieniajmy świat na lepsze.

Tego życzymy Wam i sobie! Wesołego Alleluja! 🐣


Spodobało Ci się? Napisz nam o tym i czytaj nas regularnie. Możesz również podzielić się tym artykułem z innymi (Facebook, Twitter). Będzie nam niezmiernie miło.
Ponadto jeśli jeszcze tego nie zauważyliście to w menu górnym pojawił się nowy link. Dzieci i młodzież zapraszamy na RubyCamp Gliwice - letnie zajęcia z programowania.

Tagi:

Kategorie:

Ostatnia aktualizacja:

Zostaw komentarz