Find the last Sunday of each month: Difference between revisions
m
→{{header|Haskell}}: Tidying
(Moved Algol 68 to the correct place) |
m (→{{header|Haskell}}: Tidying) |
||
Line 2,230:
=={{header|Haskell}}==
<lang Haskell>import Data.
import Data.Time.Calendar.WeekDate (toWeekDate)▼
import Data.Maybe (fromJust)
import Data.Time.Calendar
( Day,
addDays,
fromGregorian,
showGregorian,
)
▲import Data.Time.Calendar.WeekDate (toWeekDate)
---------------- LAST SUNDAY OF EACH MONTH ---------------
findWeekDay :: Int -> Day -> Day▼
findWeekDay dayOfWeek date =▼
fromJust $▼
(\x ->▼
let (_, _, day) = toWeekDate x▼
in dayOfWeek == day)▼
((`addDays` date) <$> [-6 .. 0])▼
lastSundayOfEachMonth = lastWeekDayDates 7
weekDayDates :: Int -> Integer -> [String]▼
weekDayDates dayOfWeek year =▼
(showGregorian . findWeekDay dayOfWeek) .▼
▲ (fromGregorian year <*> gregorianMonthLength year) <$>
[1 .. 12]▼
--------------------------- TEST -------------------------
main :: IO ()
main =
mapM_
putStrLn
( intercalate " "
<$> transpose
(lastSundayOfEachMonth <$> [2013 .. 2017])
)
------------------- NEAREST DAY OF WEEK ------------------
. (fromGregorian year <*> gregorianMonthLength year)
▲ <$> [1 .. 12]
▲ (find p ((`addDays` date) <$> [-6 .. 0]))
where
{{Out}}
<pre>2018-01-28 2019-01-27 2020-01-26 2021-01-31 2022-01-30 2023-01-29
|