Problem 19
コンテンツ
You are given the following information, but you may prefer to do some research for yourself.
1 Jan 1900 was a Monday.
Thirty days has September,
April, June and November.
All the rest have thirty-one,
Saving February alone,
Which has twenty-eight, rain or shine.
And on leap years, twenty-nine.
A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
これは日数を数えればいいと思うんですね。で7で割ると。遅延評価って便利。
days =[,31,28,31,30,31,30,31,31,30,31,30,31] day (year,month)| isLeap year&& month==2 =29 | otherwise = days!!month where isLeap y =y`mod`4==&&y`mod`100/=||y`mod`400== dayFrom =((1900,1),1):[(next ym,mod (d+day ym)7)|(ym,d)<-dayFrom] where next (y,m) | m==12 = (y+1,1) | otherwise = (y,m+1) p019 = length .filter(==). map snd.takeWhile((<(2001,1)).fst)$dropWhile((<(1901,1)).fst) dayFrom
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)