HP Forums
(22s or 27s, 17b, etc) Calculate day of week from 1901 to 2099 - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: General Software Library (/forum-13.html)
+--- Thread: (22s or 27s, 17b, etc) Calculate day of week from 1901 to 2099 (/thread-18059.html)



(22s or 27s, 17b, etc) Calculate day of week from 1901 to 2099 - arhtur - 02-20-2022 03:36 PM

On the HP 22s, with no branching or loops, little more than equations are possible on it. However, using a creatively written equation, it is possible to calculate the day of the week from 1901 to 2099 and also handle leap years.

To calculate the first day of a year, F, we use the following formula:

F=(IP( 1.25 x (Year + 3)) + 2) mod 7

Since the HP 22s does not have the mod function, we can use:

a mod b = FP( a / b ) x b

So

F=FP( (IP( 1.25 x (Year + 3)) + 2) / 7) x 7

To determine which day each month begins with, we add:

( 530526416330 / 10^(Month-1) ) mod 10 or FP( ( 530526416330 / 10^(Month-1) ) / 10) x 10

Finding if a year is a leap year (0=non leap year, 1=leap year)

1-IP( (y mod 4)/4+.75 ) or 1-IP(FP(y/4)+.75)

Adding an extra day after February for leap years (0 for months 1 and 2, and 1 for months 3 and beyond)

IP(IP(M / 3) / 4 + .75)

Bringing it all together, for the HP 22s (spaces added for ease of viewing)

W=FP( ( IP(1.25 x (Y+3)) + 2 + FP( IP(530526416330 / 10^(M-1)) / 10) x 10 + D - 1 + (1 - IP( FP(Y/4) + .75)) x IP( IP(M/3) / 4 +.75)) /7)x7

Or on the 27s, 17B, etc.:

W=MOD( IP( 1.25 x (Y+3)) + 2 + MOD( IP( 530526416330 / 10^(M-1)):10) + D - 1 + (1-IP( FP(Y/4) +.75)) x IP( IP(M/3)/4+.75):7)

For the number returned, 0=Sunday, 1=Monday, 2=Tuesday … 6=Saturday


RE: (22s or 27s, 17b, etc) Calculate day of week from 1901 to 2099 - Steve Simpkin - 02-20-2022 06:09 PM

That is amazing for such a limited machine. Brilliant!