[[ProjectEular]]

 -- Problem 19
 
 module Main (main) where
 
 main :: IO ()
 main = print $ problem19
 
 problem19 :: Int
 problem19 = length [ (year,month) | year  <- [1901..2000], month <- [1..12], isSunday year month 1 ]
 
 isSunday :: Int -> Int -> Int -> Bool
 isSunday year month day = zeller year month day == 1
 
 -- Zeller's congruence
 -- 0: Saturday, ..., 6: Friday
 zeller :: Int -> Int -> Int -> Int
 zeller year month day =
     mod (q + (div ((m+1)*26) 10) + k + (div k 4) + (div j 4) - (2*j)) 7
     where
         (j,k) = divMod (if month < 3 then year-1 else year) 100
         m = if month < 3 then month+12 else month
         q = day


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS