Find the last Sunday of each month: Difference between revisions
Content added Content deleted
(Frink) |
(Added solution for Action!) |
||
Line 138: | Line 138: | ||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
2013-01-27 |
|||
2013-02-24 |
|||
2013-03-31 |
|||
2013-04-28 |
|||
2013-05-26 |
|||
2013-06-30 |
|||
2013-07-28 |
|||
2013-08-25 |
|||
2013-09-29 |
|||
2013-10-27 |
|||
2013-11-24 |
|||
2013-12-29 |
|||
</pre> |
|||
=={{header|Action!}}== |
|||
Day of the week is determined using [https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods Sakamoto method]. |
|||
<lang Action!>;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods |
|||
BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 |
|||
BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] |
|||
BYTE res |
|||
IF m<3 THEN |
|||
y==-1 |
|||
FI |
|||
res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 |
|||
RETURN (res) |
|||
BYTE FUNC IsLeapYear(INT y) |
|||
IF y MOD 100=0 THEN |
|||
IF y MOD 400=0 THEN |
|||
RETURN (1) |
|||
ELSE |
|||
RETURN (0) |
|||
FI |
|||
FI |
|||
IF y MOD 4=0 THEN |
|||
RETURN (1) |
|||
FI |
|||
RETURN (0) |
|||
INT FUNC GetMaxDay(INT y BYTE m) |
|||
BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] |
|||
IF m=2 AND IsLeapYear(y)=1 THEN |
|||
RETURN (29) |
|||
FI |
|||
RETURN (MaxDay(m-1)) |
|||
PROC PrintB2(BYTE x) |
|||
IF x<10 THEN |
|||
Put('0) |
|||
FI |
|||
PrintB(x) |
|||
RETURN |
|||
PROC Main() |
|||
INT MinYear=[1753],MaxYear=[9999],y |
|||
BYTE m,d,last,maxD |
|||
DO |
|||
PrintF("Input year in range %I...%I: ",MinYear,MaxYear) |
|||
y=InputI() |
|||
UNTIL y>=MinYear AND y<=MaxYear |
|||
OD |
|||
FOR m=1 TO 12 |
|||
DO |
|||
last=0 |
|||
maxD=GetMaxDay(y,m) |
|||
FOR d=1 TO maxD |
|||
DO |
|||
IF DayOfWeek(y,m,d)=0 THEN |
|||
last=d |
|||
FI |
|||
OD |
|||
PrintI(y) Put('-) |
|||
PrintB2(m) Put('-) |
|||
PrintB2(last) PutE() |
|||
OD |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Find_the_last_Sunday_of_each_month.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
Input year in range 1753...9999: 2013 |
|||
2013-01-27 |
2013-01-27 |
||
2013-02-24 |
2013-02-24 |