В последнее время всё чаще использую Clojure в качестве скриптового языка, когда нужно быстро получить ответ на какой-либо вопрос, и писать полноценную программу не представляется целесообразным.
Сегодня наткнулся на письмо счастья следующего содержания:
":-) В этом октябре - 5 понедельников, 5 суббот и 5 воскресений. Это происходит раз в 823 года. Это называется - мешок денег. Поэтому скопируй это на свой статус и деньги придут в течении 4 дней. "
Моментально возник вопрос: "А в каких последних 5 годах первым днём октября была суббота?"
Накидать ответ было недолго: в 2011, 2005, 1994, 1988 и 1983. Действительно, раз в 823 года ровно.
(import java.util.Calendar)
(defn get-weekday
[cal year month day]
(.set cal year month day)
(.get cal Calendar/DAY_OF_WEEK))
(println "Years: "
(let [cal (Calendar/getInstance)]
(take 5
(filter
(fn [year] (= (get-weekday cal year Calendar/OCTOBER 1) Calendar/SATURDAY))
(iterate dec 2011)))))
-------------------------
Years: (2011 2005 1994 1988 1983)