Doomsday rule: Difference between revisions

Content added Content deleted
(J)
Line 822: Line 822:
2077-02-12: Friday
2077-02-12: Friday
2101-04-02: Saturday</pre>
2101-04-02: Saturday</pre>

=={{header|J}}==

To find the doomsday for a month, find the number of days for each month in that year, and compute the running sum from right to left. Then add 1 to each of those numbers, find the mod 7 remainder and add 1 again
<lang J> 1+7|1++/\.31 28 31 30 31 30 31 31 30 31 30 31
3 7 7 4 2 6 4 1 5 3 7 5
1+7|1++/\.31 29 31 30 31 30 31 31 30 31 30 31
4 1 7 4 2 6 4 1 5 3 7 5</lang>

Also note that adding 7 is like adding 0 in modulo 7 arithmetic.

Thus:

<lang J>get_weekday=: {{ 'Y M D'=. y
Y0=. todayno Y,1 1
Y1=. todayno 1+Y,0 0
aday=. M{1+7|1++/\.0,>.//./}.|:todate Y0+i.Y1-Y0
dday=. 7|2 5 4 6+/ .*1,4 100 400|/Y
'day',~;(7|D+dday-aday){;:'Sun Mon Tues Wednes Thurs Fri Satur'
}}</lang>

Task examples:

<lang J> get_weekday 1800 1 6
Monday
get_weekday 1875 3 29
Monday
get_weekday 1915 12 7
Tuesday
get_weekday 1970 12 23
Wednesday
get_weekday 2043 5 14
Thursday
get_weekday 2077 2 12
Friday
get_weekday 2101 4 2
Saturday</lang>


=={{header|Java}}==
=={{header|Java}}==