Friday, the Thirteenth
March 13, 2009
We reuse the julian date function from the Mardi Gras exercise:
(define (julian year month day)
(let* ((a (quotient (- 14 month) 12))
(y (+ year 4800 (- a)))
(m (+ month (* 12 a) -3)))
(+ day
(quotient (+ (* 153 m) 2) 5)
(* 365 y)
(quotient y 4)
(- (quotient y 100))
(quotient y 400)
(- 32045))))
Then we check each Friday for the next 120 months:
(define (fri13-ten year month)
(let loop ((m (if (= month 12) 1 (+ month 1)))
(y (if (= month 12) (+ year 1) year))
(n 0) (k 120))
(if (zero? k) n
(loop (if (= m 12) 1 (+ m 1))
(if (= m 12) (+ y 1) y)
(if (= (modulo (julian y m 13) 7) 4) (+ n 1) n)
(- k 1)))))
There are seventeen Fridays the thirteenth in the next ten years:
> (fri13-ten 2009 3)
17
The seventeen Fridays are 11/2009, 8/2010, 5/2011, 1/2012, 4/2012, 7/2012, 9/2013, 12/2013, 6/2014, 2/2015, 3/2015, 11/2015, 5/2016, 1/2017, 10/2017, 4/2018, and 7/2018. You can run the code at http://programmingpraxis.codepad.org/RqYg0Qfi.
Approximately 120/7 = 17
https://github.com/ftt/programming-praxis/blob/master/20090313-friday-the-thirteenth/friday-the-thirteenth.py
I can’t see the exemple
@etiene: Welcome to Programming Praxis! Click on Page 2 at the end of the exercise.