聚会

聚会

中等

简介

每个月,你的伴侣都要和最好的朋友见一次面。两个人的日程都很满,想找一个合适的日期并不容易!考虑到你自己的日程也很忙,你的伴侣总是会先跟你确认可能的见面日期:

  • “下个月第一个星期五能见面吗?”
  • “那第三个星期三呢?”
  • “也许最后一个星期日?”

在这个月的通话里,你的伴侣问了你这样一个问题:

  • “我想在 teenth 星期四见面,可以吗?”

你一头雾水,便问什么是“teenth”日。你的伴侣解释说,teenth 日是他们自己编出来的一个概念,指的是一个月里以“-teenth”结尾的那些日期:

  • 13th (thirteenth)
  • 14th (fourteenth)
  • 15th (fifteenth)
  • 16th (sixteenth)
  • 17th (seventeenth)
  • 18th (eighteenth)
  • 19th (nineteenth)

由于一周也有七天,因此可以保证,每个月里每个星期几都_恰好_有一个 teenth 日。

现在你已经明白了 teenth 日的概念,便查看自己的日历。teenth 星期四那天你没有别的安排,于是你愉快地和伴侣确认了这个日期。

说明

你的任务是:给定月份、年份、星期几和某一周,找出聚会的确切日期。

需要考虑的周值有 5 个:first、second、third、fourth、last、teenth。

例如,可能会要求你找出 2018 年 1 月第一个星期一的聚会日期(2018 年 1 月 1 日)。

同样,也可能要求你找出:

  • 2019 年 8 月的第三个星期二(2019 年 8 月 20 日)
  • 2020 年 5 月的 teenth 星期三(2020 年 5 月 13 日)
  • 2021 年 7 月的第四个星期日(2021 年 7 月 25 日)
  • 2022 年 11 月的最后一个星期四(2022 年 11 月 24 日)
  • 1953 年 8 月的 teenth 星期六(1953 年 8 月 15 日)

Teenth

teenth 周指的是一个月中以 '-teenth' 结尾的那七天(13th、14th、15th、16th、17th、18th、19th)。

如果要找 1953 年 8 月的 teenth 星期六,就来看一下它的日历:

    August 1953
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

由此可知,teenth 星期六是 1953 年 8 月 15 日。

提示

要完成这道练习,你需要实现meetupDay函数。

meetupDay的类型签名已经写好了,但函数本身要由你来定义。


来源

Jeremy Hinegardner 提到过一种每月“Wednesteenth”在 Boulder 举行的聚会
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Haskell Exercism

准备好开始 聚会 了吗?

注册 Exercism,借助 107 个练习 和真人导师指导,学习并掌握 Haskell,全部免费。