13日の金曜日を数え上げる

今日から20013年12月31日までの、13日の金曜日とその総数を表示してください。

どう書く?org


lequeさんのを参考に改変。list-ecを使ってるのに、さらにdropやfilterを使うのはなんだかもったいない気がするので。でも結局元のコードより長くなってるっていう(単に内包表記マクロのマイナーな機能が使ってみたいだけw)。

(use srfi-19)
(use srfi-42)

(let1 ds (list-ec (:let today (current-date))
                  (: y (date-year today) 2014)
                  (: m 1 13)
                  (:let d (make-date 0 0 0 0 13 m y 0))
           (and (= (date-week-day d) 5)
                (or (> (date-year d) (date-year today))
                    (>= (date-month d) (date-month today))))
           d)
  (dolist (d ds) (print (date->string d "~1")))
  (print (length ds)))

13日の金曜日を表示するだけか総数を表示するだけなら、do-ecとかsum-ecとかで書けるんだけど。

この問題始めに見て、20013年まで求めさせることで2038年問題にひっかかる言語を(ゴルフ的に)劣勢に立たせるようなエグい問題かと思ったけど、単なる2013年のtypoっぽい。

M-x oshiete-shirosan

ところで、srfi-19はGaucheのマニュアルのモジュール索引の方には載ってないようですが。。。