; tomohiko sakamoto's day-of-week algorithm
(define (day-of-week year month day)
(let ((t '#(0 3 2 5 0 3 5 1 4 6 2 4))
(year (if (< month 3) (- year 1) year)))
(vector-ref '#(Sun Mon Tue Wed Thu Fri Sat)
(modulo (+ year (quotient year 4)
(- (quotient year 100)) (quotient year 400)
(vector-ref t (- month 1)) day) 7))))
(display (day-of-week 2016 2 28)) (newline)
(display (day-of-week 2016 2 29)) (newline)
(display (day-of-week 2016 3 1)) (newline)
(display (day-of-week 2016 6 17)) (newline)
OyB0b21vaGlrbyBzYWthbW90bydzIGRheS1vZi13ZWVrIGFsZ29yaXRobQoKKGRlZmluZSAoZGF5LW9mLXdlZWsgeWVhciBtb250aCBkYXkpCiAgKGxldCAoKHQgJyMoMCAzIDIgNSAwIDMgNSAxIDQgNiAyIDQpKQogICAgICAgICh5ZWFyIChpZiAoPCBtb250aCAzKSAoLSB5ZWFyIDEpIHllYXIpKSkKICAgICh2ZWN0b3ItcmVmICcjKFN1biBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCkKICAgICAgKG1vZHVsbyAoKyB5ZWFyIChxdW90aWVudCB5ZWFyIDQpCiAgICAgICAgKC0gKHF1b3RpZW50IHllYXIgMTAwKSkgKHF1b3RpZW50IHllYXIgNDAwKQogICAgICAgICh2ZWN0b3ItcmVmIHQgKC0gbW9udGggMSkpIGRheSkgNykpKSkKCihkaXNwbGF5IChkYXktb2Ytd2VlayAyMDE2IDIgMjgpKSAobmV3bGluZSkKKGRpc3BsYXkgKGRheS1vZi13ZWVrIDIwMTYgMiAyOSkpIChuZXdsaW5lKQooZGlzcGxheSAoZGF5LW9mLXdlZWsgMjAxNiAzIDEpKSAgKG5ld2xpbmUpCihkaXNwbGF5IChkYXktb2Ytd2VlayAyMDE2IDYgMTcpKSAobmV3bGluZSk=