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}}==