http://www.colorless-sight.jp/wiki/?ProjectEular%2FProblem19
-- 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
|
最新の20件2023-08-12
2022-12-28
2017-08-15
2014-01-31
2014-01-29
2013-06-04
2012-11-23
2010-08-01
2010-07-24
Tweet
|