RosettaCodeData/Task/Doomsday-rule/R/doomsday-rule.r
2026-04-30 12:34:36 -04:00

22 lines
797 B
R

daynames <- c("Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday")
isleapyear <- function(y) (y%%4==0)&((y%%100!=0)|(y%%400==0))
anchors <- function(y) c(ifelse(isleapyear(y), 4, 3),
ifelse(isleapyear(y), 1, 7),
7, 4, 2, 6, 4, 1, 5, 3, 7, 5)
doomsday <- function(y) (2+5*(y%%4)+4*(y%%100)+6*(y%%400))%%7
wd <- function(y, m, d) (doomsday(y)+d-anchors(y)[m])%%7
test_dates <- list(c(1800, 1, 6),
c(1875, 3, 29),
c(1915, 12, 7),
c(1970, 12, 23),
c(2043, 5, 14),
c(2077, 2, 12),
c(2101, 4, 2))
raw_wds <- sapply(test_dates, function(v) do.call(wd, as.list(v)))
cat(daynames[raw_wds+1], "\n")