Holidays related to Easter: Difference between revisions
Content added Content deleted
mNo edit summary |
(Initial solution for R) |
||
Line 3,557: | Line 3,557: | ||
2020 Easter: Sun 12 Apr, Ascension: Thu 21 May, Pentecost: Sun 31 May, Trinity: Sun 7 Jun, Corpus: Thu 11 Jun |
2020 Easter: Sun 12 Apr, Ascension: Thu 21 May, Pentecost: Sun 31 May, Trinity: Sun 7 Jun, Corpus: Thu 11 Jun |
||
</pre> |
</pre> |
||
=={{header|R}}== |
|||
<lang R> |
|||
library(tidyverse) |
|||
library(lubridate) |
|||
# Make a pretty date function: |
|||
pretty_date = stamp_date("Thu, Jun 1, 2000") |
|||
# Gregorian calendar: |
|||
tibble(year = c(seq(400, 2100, 100), 2010:2020)) %>% |
|||
arrange(year) %>% |
|||
mutate(a = year %% 19, |
|||
b = year %% 4, |
|||
c = year %% 7, |
|||
k = year %/% 100, |
|||
p = (13 + 8 * k) %/% 25, |
|||
q = k %/% 4, |
|||
M = (15 - p + k - q) %% 30, |
|||
N = (4 + k - q) %% 7, |
|||
d = (19 * a + M) %% 30, |
|||
e = (2 * b + 4 * c + 6 * d + N) %% 7, |
|||
easter_mar = 22 + d + e, |
|||
easter_apr = d + e - 9, |
|||
easter_day = if_else(easter_mar <= 31, easter_mar, easter_apr), |
|||
easter_day = case_when( |
|||
d == 29 & e == 6 ~ 19, |
|||
d == 28 & e == 6 & (11 * M + 11) %% 30 < 19 ~ 18, |
|||
TRUE ~ easter_day), |
|||
easter_day = sprintf("%02d", easter_day), |
|||
easter_year = sprintf("%04d", year), |
|||
easter_mon = if_else(easter_mar <= 31, "03", "04")) %>% |
|||
unite("easter", easter_year, easter_mon, easter_day, sep = "-") %>% |
|||
mutate(Easter = parse_date(easter, format = "%Y-%m-%e")) %>% |
|||
select(Easter) %>% |
|||
mutate(Ascension = Easter + 39, |
|||
Pentecost = Ascension + 10, |
|||
Trinity = Pentecost + 7, |
|||
`Corpus Christi` = Trinity + 4, |
|||
across(.fns = pretty_date)) |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
# A tibble: 29 x 5 |
|||
Easter Ascension Pentecost Trinity `Corpus Christi` |
|||
<chr> <chr> <chr> <chr> <chr> |
|||
1 Sun, Apr 02, 0400 Thu, May 11, 0400 Sun, May 21, 0400 Sun, May 28, 0400 Thu, Jun 01, 0400 |
|||
2 Sun, Apr 04, 0500 Thu, May 13, 0500 Sun, May 23, 0500 Sun, May 30, 0500 Thu, Jun 03, 0500 |
|||
3 Sun, Apr 13, 0600 Thu, May 22, 0600 Sun, Jun 01, 0600 Sun, Jun 08, 0600 Thu, Jun 12, 0600 |
|||
4 Sun, Apr 15, 0700 Thu, May 24, 0700 Sun, Jun 03, 0700 Sun, Jun 10, 0700 Thu, Jun 14, 0700 |
|||
5 Sun, Apr 23, 0800 Thu, Jun 01, 0800 Sun, Jun 11, 0800 Sun, Jun 18, 0800 Thu, Jun 22, 0800 |
|||
6 Sun, Mar 28, 0900 Thu, May 06, 0900 Sun, May 16, 0900 Sun, May 23, 0900 Thu, May 27, 0900 |
|||
7 Sun, Mar 30, 1000 Thu, May 08, 1000 Sun, May 18, 1000 Sun, May 25, 1000 Thu, May 29, 1000 |
|||
8 Sun, Apr 08, 1100 Thu, May 17, 1100 Sun, May 27, 1100 Sun, Jun 03, 1100 Thu, Jun 07, 1100 |
|||
9 Sun, Apr 09, 1200 Thu, May 18, 1200 Sun, May 28, 1200 Sun, Jun 04, 1200 Thu, Jun 08, 1200 |
|||
10 Sun, Apr 18, 1300 Thu, May 27, 1300 Sun, Jun 06, 1300 Sun, Jun 13, 1300 Thu, Jun 17, 1300 |
|||
11 Sun, Apr 20, 1400 Thu, May 29, 1400 Sun, Jun 08, 1400 Sun, Jun 15, 1400 Thu, Jun 19, 1400 |
|||
12 Sun, Apr 01, 1500 Thu, May 10, 1500 Sun, May 20, 1500 Sun, May 27, 1500 Thu, May 31, 1500 |
|||
13 Sun, Apr 02, 1600 Thu, May 11, 1600 Sun, May 21, 1600 Sun, May 28, 1600 Thu, Jun 01, 1600 |
|||
14 Sun, Apr 11, 1700 Thu, May 20, 1700 Sun, May 30, 1700 Sun, Jun 06, 1700 Thu, Jun 10, 1700 |
|||
15 Sun, Apr 13, 1800 Thu, May 22, 1800 Sun, Jun 01, 1800 Sun, Jun 08, 1800 Thu, Jun 12, 1800 |
|||
16 Sun, Apr 15, 1900 Thu, May 24, 1900 Sun, Jun 03, 1900 Sun, Jun 10, 1900 Thu, Jun 14, 1900 |
|||
17 Sun, Apr 23, 2000 Thu, Jun 01, 2000 Sun, Jun 11, 2000 Sun, Jun 18, 2000 Thu, Jun 22, 2000 |
|||
18 Sun, Apr 04, 2010 Thu, May 13, 2010 Sun, May 23, 2010 Sun, May 30, 2010 Thu, Jun 03, 2010 |
|||
19 Sun, Apr 24, 2011 Thu, Jun 02, 2011 Sun, Jun 12, 2011 Sun, Jun 19, 2011 Thu, Jun 23, 2011 |
|||
20 Sun, Apr 08, 2012 Thu, May 17, 2012 Sun, May 27, 2012 Sun, Jun 03, 2012 Thu, Jun 07, 2012 |
|||
21 Sun, Mar 31, 2013 Thu, May 09, 2013 Sun, May 19, 2013 Sun, May 26, 2013 Thu, May 30, 2013 |
|||
22 Sun, Apr 20, 2014 Thu, May 29, 2014 Sun, Jun 08, 2014 Sun, Jun 15, 2014 Thu, Jun 19, 2014 |
|||
23 Sun, Apr 05, 2015 Thu, May 14, 2015 Sun, May 24, 2015 Sun, May 31, 2015 Thu, Jun 04, 2015 |
|||
24 Sun, Mar 27, 2016 Thu, May 05, 2016 Sun, May 15, 2016 Sun, May 22, 2016 Thu, May 26, 2016 |
|||
25 Sun, Apr 16, 2017 Thu, May 25, 2017 Sun, Jun 04, 2017 Sun, Jun 11, 2017 Thu, Jun 15, 2017 |
|||
26 Sun, Apr 01, 2018 Thu, May 10, 2018 Sun, May 20, 2018 Sun, May 27, 2018 Thu, May 31, 2018 |
|||
27 Sun, Apr 21, 2019 Thu, May 30, 2019 Sun, Jun 09, 2019 Sun, Jun 16, 2019 Thu, Jun 20, 2019 |
|||
28 Sun, Apr 12, 2020 Thu, May 21, 2020 Sun, May 31, 2020 Sun, Jun 07, 2020 Thu, Jun 11, 2020 |
|||
29 Sun, Mar 28, 2100 Thu, May 06, 2100 Sun, May 16, 2100 Sun, May 23, 2100 Thu, May 27, 2100 |
|||
</pre> |
|||
=={{header|Racket}}== |
=={{header|Racket}}== |