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