今月「日曜日」が何回あるのか数える

Ruby

  • 月の最終日を調べて,最終日曜日を調べて 7 で割る
  • 1 で足したり引いたりきもちわる
  • (31..28) ってできないのか. reverse した.
require 'date'

now = Date.today
y = now.year
m = now.month
last_jd = (28..31).map {|d| Date.valid_date?(y,m,d)}.reverse.detect{|d| d}
last = Date.jd(last_jd)

puts (last.day - last.wday - 1) / 7 + 1

Haskell

  • がんばって書いた.なんとかコンパイルできた.
  • head filter っぽいのないのかな
import Time
nDays n = TimeDiff { tdYear  = 0,
                    tdMonth = 0,
                    tdDay   = n,
                    tdHour  = 0,
                    tdMin   = 0,
                    tdSec   = 0,
                    tdPicosec = 0
                    }

isSameMonth c0 c1 = (f c0) == (f c1)
    where f = ctMonth.toUTCTime

lastDay c = head $ filter (isSameMonth c) $ [(nDays (d - day)) `addToClockTime` c| d <- [31,30..28]]
        where day = ctDay.toUTCTime c

lastSunday c = head $ filter isSunday $ [(nDays (-w)) `addToClockTime` (lastDay c) | w <- [0..6]]
    where isSunday c' = (ctWDay.toUTCTime) c' == Sunday

countSunday c = (d - 1) `div` 7 + 1
    where d = ctDay.toUTCTime $ lastSunday c

main = do {
           c <-  getClockTime;
           print $ countSunday c
           }