Write a program or a script that returns the last Sundays of each month of a given year. The year may be given through any simple input method in your language (command line, std in, etc).

Example of an expected output:

./last_sundays 2013
2013-01-27
2013-02-24
2013-03-31
2013-04-28
2013-05-26
2013-06-30
2013-07-28
2013-08-25
2013-09-29
2013-10-27
2013-11-24
2013-12-29


Related tasks
 Day of the week
 Five weekends
 Last Friday of each month


(ns last-sundays.core
  (:require [clj-time.core :as time]
            [clj-time.periodic :refer [periodic-seq]]
            [clj-time.format :as fmt])
  (:import (org.joda.time DateTime DateTimeConstants))
  (:gen-class))
 
(defn sunday? [t]
  (= (.getDayOfWeek t) (DateTimeConstants/SUNDAY)))
 
(defn sundays [year]
  (take-while #(= (time/year %) year)
              (filter sunday? (periodic-seq (time/date-time year 1 1) (time/days 1)))))
 
(defn last-sundays-of-months [year]
  (->> (sundays year)
       (group-by time/month)
       (vals)
       (map (comp first #(sort-by time/day > %)))
       (map #(fmt/unparse (fmt/formatters :year-month-day) %))
       (interpose "\n")
       (apply str)))
 
(defn -main [& args]
  (println (last-sundays-of-months (Integer. (first args)))))
 