Last Friday of each month: Difference between revisions

Racket version
(Racket version)
Line 869:
key=lambda x:int(x.split("-")[1])):
print item</lang>
 
=={{header|Racket}}==
<lang racket>
#lang racket
(require srfi/19 math)
 
(define (days-in-month m y)
(define lengths #(0 31 #f 31 30 31 30 31 31 30 31 30 31))
(define d (vector-ref lengths m))
(if d d (days-in-feb y)))
 
(define (leap-year? y)
(and (divides? 4 y)
(or (not (divides? 100 y))
(divides? 400 y))))
 
(define (days-in-feb y)
(if (leap-year? y) 29 28))
 
(define (last-day-in-month m y)
(make-date 0 0 0 0 (days-in-month m y) m y 0))
 
(define (week-day date)
(define days #(sun mon tue wed thu fri sat))
(vector-ref days (date-week-day date)))
 
(define (last-fridays y)
(for/list ([m (in-range 1 13)])
(prev-friday (last-day-in-month m y))))
 
(define 24hours (make-time time-duration 0 (* 24 60 60)))
 
(define (prev-day d)
(time-utc->date
(subtract-duration
(date->time-utc d) 24hours)))
 
(define (prev-friday d)
(if (eq? (week-day d) 'fri)
d
(prev-friday (prev-day d))))
 
(for ([d (last-fridays 2012)])
(displayln (~a (date->string d "~a ~d ~b ~Y"))))
</lang>
Output:
<lang racket>
Fri 27 Jan 2012
Fri 24 Feb 2012
Fri 30 Mar 2012
Fri 27 Apr 2012
Fri 25 May 2012
Fri 29 Jun 2012
Fri 27 Jul 2012
Fri 31 Aug 2012
Fri 28 Sep 2012
Fri 26 Oct 2012
Fri 30 Nov 2012
Fri 28 Dec 2012
</lang>
 
 
=={{header|REXX}}==
Anonymous user