Day of the week of Christmas and New Year: Difference between revisions

no edit summary
(Added Chipmunk Basic, GW-BASIC and MSX Basic)
No edit summary
 
(10 intermediate revisions by 5 users not shown)
Line 619:
=={{header|EasyLang}}==
<syntaxhighlight lang="easylang">
func dayOfTheWeek year month day . result .
# Based on Conway's doomsday algorithm
# 1. Calculate the doomsday for the century
century = floor (year / 100)
if century mod 4 = 0
Line 632 ⟶ 631:
centuryDoomsday = 3
.
# 2. Find the doomsday of the year
mainYear = year mod 100
yearDoomsday = (floor (mainYear / 12) + mainYear mod 12 + floor (mainYear mod 12 / 4) + centuryDoomsday) mod 7
# 3. Check if the year is leap
if mainYear = 0
if century mod 4 = 0
Line 649 ⟶ 646:
.
.
# 4. Calculate the DOTW of January 1
if leap = 1
januaryOne = (yearDoomsday + 4) mod 7
Line 655 ⟶ 651:
januaryOne = (yearDoomsday + 5) mod 7
.
monthDays[] = [ 0 31 59 90 120 151 181 212 243 273 304 334 ]
# 5. Determine the nth day of the year
nthDay = monthDays[month]
if month = 1
if month > NthDay = 02
elif month nthDay += 2leap
NthDay = 31
elif month = 3
NthDay = 59 + leap
elif month = 4
NthDay = 90 + leap
elif month = 5
NthDay = 120 + leap
elif month = 6
NthDay = 151 + leap
elif month = 7
NthDay = 181 + leap
elif month = 8
NthDay = 212 + leap
elif month = 9
NthDay = 243 + leap
elif month = 10
NthDay = 273 + leap
elif month = 11
NthDay = 304 + leap
elif month = 12
NthDay = 334 + leap
.
NthDaynthDay += day
return (januaryOne + nthDay - 1) mod 7 + 1
# 6. Finally, calculate the day of the week
result = (januaryOne + NthDay - 1) mod 7
.
days$[] = [ "Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" ]
func numberToDay n . day$ .
#
if n = 0
print "2021-12-25 is on " & days$[dayOfTheWeek 2021 12 25]
day$ = "Sunday"
print "2022-1-1 is on " & days$[dayOfTheWeek 2022 1 1]
elif n = 1
day$ = "Monday"
elif n = 2
day$ = "Tuesday"
elif n = 3
day$ = "Wednesday"
elif n = 4
day$ = "Thursday"
elif n = 5
day$ = "Friday"
elif n = 6
day$ = "Saturday"
.
.
call dayOfTheWeek 2021 12 25 result
call numberToDay result day$
print "2021-12-25 is on " & day$
call dayOfTheWeek 2022 1 1 result
call numberToDay result day$
print "2022-1-1 is on " & day$
</syntaxhighlight>
{{out}}
Line 811 ⟶ 766:
Year 2245, New Years's Day: Wednesday, January 1, 2245 and Christmas: Thursday, December 25, 2245
Year 2393, New Years's Day: Friday, January 1, 2393 and Christmas: Saturday, December 25, 2393
</pre>
 
=={{header|Nim}}==
<syntaxhighlight lang="Nim">
import std/times
 
echo "25th of December 2021 is a ", getDayOfWeek(25, mDec, 2021)
echo "1st of January 2022 is a ", getDayOfWeek(1, mJan, 2022)
</syntaxhighlight>
 
{{out}}
<pre>25th of December 2021 is a Saturday
1st of January 2022 is a Saturday
</pre>
 
Line 826 ⟶ 794:
<pre>25.12.2021 is a Saturday
01.01.2022 is a Saturday<</pre>
 
=={{header|Pascal}}==
==={{header|Free Pascal}}===
<syntaxhighlight lang="pascal">
Program daysofweek;
Uses sysutils;
 
Const Years : array Of integer = (1578, 1590, 1642, 1957, 2020, 2021, 2022, 2242, 2245, 2393);
 
Var christmasday, newyearsday : tdatetime;
year : integer;
Begin
For year In years Do
Begin
christmasday := encodeDate(year,12,25);
newyearsday := encodeDate(year,1,1);
writeln('in ',year,' New Years day is on ',DefaultFormatSettings.LongDayNames[DayOfWeek(
newyearsday)],', and Christmas day on a ',DefaultFormatSettings.LongDayNames[DayOfWeek(
christmasday
)]);
End;
End.
</syntaxhighlight>
{{out}}
<pre>
in 1578 New Years day is on Sunday, and Christmas day on a Monday
in 1590 New Years day is on Monday, and Christmas day on a Tuesday
in 1642 New Years day is on Wednesday, and Christmas day on a Thursday
in 1957 New Years day is on Tuesday, and Christmas day on a Wednesday
in 2020 New Years day is on Wednesday, and Christmas day on a Friday
in 2021 New Years day is on Friday, and Christmas day on a Saturday
in 2022 New Years day is on Saturday, and Christmas day on a Sunday
in 2242 New Years day is on Saturday, and Christmas day on a Sunday
in 2245 New Years day is on Wednesday, and Christmas day on a Thursday
in 2393 New Years day is on Friday, and Christmas day on a Saturday
</pre>
 
 
=={{header|Perl}}==
Line 1,068 ⟶ 1,073:
The next New Year's day is on a Saturday.
done...</pre>
 
=={{header|RPL}}==
{{works with|HP|48}}
≪ 1000000 / 25.12 + 0
TSTR 1 3 SUB
"X-MAS: " OVER +
"NEW YEAR: " ROT +
≫ '<span style="color:blue">TASK</span>' STO
 
2021 <span style="color:blue">TASK</span>
{{out}}
<pre>
2: "X-MAS: SAT"
1: "NEW YEAR: SAT"
</pre>
 
=={{header|Ruby}}==
Line 1,097 ⟶ 1,117:
This uses the same years as the Raku example.
 
The above module uses the Gregorian Proleptic calendar and therefore gives the wrong days of the week for 1578 as the earliest year for the adoption of the Gregorian calendar was 1582 when 10 days (from 5th until 14th October inclusive) were omitted. To get the correct days for 1578 (and agree with the Ruby entry) we therefore need to add 10 days to the Gregorian date which the ''Date.fromJulian'' method does automatically.
The actual days for 1578 may have been different as the Gregorian calendar didn't start until 1582.
<syntaxhighlight lang="ecmascriptwren">import "./date" for Date
 
System.print("Days of week per Gregorian Proleptic calendar:")
var years = [1578, 1590, 1642, 1957, 2020, 2021, 2022, 2242, 2245, 2393]
for (year in years) {
var newYear = Date.new(year, 1, 1).weekDay
var xmas = Date.new(year, 12, 25).weekDay
System.print(" In %(year), New year's day is on a %(newYear), and Christmas day on %(xmas).")
}
}</syntaxhighlight>
System.print("\nActual days for 1578 (Julian calendar) were 10 days later:")
System.print(" New Year's day was on %(Date.fromJulian(1578, 1, 1).weekDay), and Christmas day on %(Date.fromJulian(1578, 12, 25).weekDay).")</syntaxhighlight>
 
{{out}}
<pre>
Days of week per Gregorian Proleptic calendar:
In 1578, New year's day is on a Sunday, and Christmas day on Monday.
In 15901578, New year's day is on a MondaySunday, and Christmas day on TuesdayMonday.
In 16421590, New year's day is on a WednesdayMonday, and Christmas day on ThursdayTuesday.
In 19571642, New year's day is on a TuesdayWednesday, and Christmas day on WednesdayThursday.
In 20201957, New year's day is on a WednesdayTuesday, and Christmas day on FridayWednesday.
In 20212020, New year's day is on a FridayWednesday, and Christmas day on SaturdayFriday.
In 20222021, New year's day is on a SaturdayFriday, and Christmas day on SundaySaturday.
In 22422022, New year's day is on a Saturday, and Christmas day on Sunday.
In 22452242, New year's day is on a WednesdaySaturday, and Christmas day on ThursdaySunday.
In 23932245, New year's day is on a FridayWednesday, and Christmas day on SaturdayThursday.
In 2393, New year's day is on a Friday, and Christmas day on Saturday.
 
Actual days for 1578 (Julian calendar) were 10 days later:
New Year's day was on Wednesday, and Christmas day on Thursday.
</pre>
 
45

edits