Calculate weekday without using calendar

Just for fun, here is how to calculate weekday without using calendar or datetime functionality. Code is in 8th but formula is included in comments.

: wd  \ [y,m,d] -- n
  1 a:@ 3 n:< if         \ if month < 3
    1 ( 12 n:+ ) a:op!   \ month=month+12
    0 ' n:1- a:op!       \ year=year-1
  then

  \ (day+int((month+1)*2.61)+(year mod 100)+int((year mod 100)/4)+(2*(3-(int(year/100) mod 4)))) mod 7
  2 a:@ swap 1 a:@ n:1+ 2.61 n:* n:int 
  swap 0 a:_@ dup>r 100 n:mod
  dup 4 n:/ n:int
  3 r> 100 n:/ n:int 4 n:mod n:- 2 n:*
  5 a:close ' n:+ 0 a:reduce 7 n:mod ;

: app:main
  [2024,4,21] wd ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] caseof . cr ;

Outputs:

C:\temp\game>8th weekd.8th
Sunday

C:\temp\game>
1 Like