办公室(我们称其为“办公室”)将通过合并办公室生日聚会来减少2019年的浪费时间。在同一周的星期一至星期五(含)之间生日的任何两个人,将在该周的某个时间举行“ 共享生日派对”来庆祝。生日在周六或周日的人们根本不会参加任何聚会。
有些人不喜欢与未共享实际生日的人共享生日聚会。他们会很生气有一个共享的生日派对。
我们将模拟一个办公室,并寻找某人对共同生日聚会感到非常生气的第一周。
挑战
编写一个程序或函数,以输出2019年的第一个ISO周编号,其中模拟办公室中的某人对其共享生日聚会非常生气,但要遵循以下基本规则:
- 输入整数N > 1,即办公室中的工人人数。
- 所述Ñ生日本身是均匀分布的随机从1月1日至12月31日(忽略年02月29)。
- 但是用于确定共享生日聚会的工作周是2019 ISO周日期,其介于2019-W01-1(2018-12-31)和2019-W52-7(2019-12-29)之间。新的ISO周每个星期一开始。(我认为这是您应对此挑战的ISO周真正需要的全部内容)。
- 对于办公室中的N个人,每个人都有1/3的机会拥有“ 非常生气的 共享生日聚会”个性类型,因此您也必须进行模拟。
- 但如果与同一个生日的人共享聚会,他们不会生气。
- 输出第一次出现“ 非常生气”的人的ISO周号(精确的格式,只要周号清晰即可)。如果没有生气的人,您可以输出与ISO周无关的任何内容,否则程序可能会出错等。
一些简化的假设:
- 正如我提到的,完全忽略2月29日的问题(不必要的并发症)
- 忽略公共假期(这是一个国际社会,因此我们的假期会有所不同),只是假设办公室在每个工作日都开放。
规则
这是代码高尔夫球。每种语言的最短答案(以字节为单位)获胜。禁止默认漏洞。
欢迎使用代码说明。
工作实例
输入N = 7的人为设计的示例1。第一和第二列是规则中所述的随机变量(当然,此处实际上并不是随机变量)。
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2018-12-31 W01 In the 2019 ISO week date year
Y 2018-12-31 W01 Same birthday, so no anger happens
N 2019-02-05 W06
Y 2019-03-15 W11 No anger happens because other W11 b-day is a Saturday
N 2019-03-16 W11
N 2019-09-08 W36 My birthday!
Y 2019-12-30 - Not in the 2019 ISO week date year
所以没有生气发生。程序或函数可能会出错或输出未与ISO周编号混淆的内容。
未指定N的示例2 。
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2019-01-19 W03
Y 2019-02-04 W06
N 2019-02-05 W06 No anger because not an angry person
... ... ... (No angry people until...)
Y 2019-03-12 W11 Very Angry Person!
N 2019-03-14 W11
... ... ... ...
输出将是W11
或等效的东西。