确定季节


11

介绍:

北半球(即欧洲,北美等),季节划分如下:
- 春季: 3月,4月,5月
- 夏季: 6月,7月,8月
- 秋季: 9月,10月,11月
- 冬季: 12月, 一月二月

但是在南半球(即澳大利亚,南美等),季节划分如下:
- 春季: 9月,10月,11月
- 夏季: 12月,1月,2月
- 秋季: 3月,4月,5月
- 冬季:六月七月八月

这种差异是由于太阳相对于赤道的位置,北半球和南半球的季节相反。

输入:

在此挑战中,我们将接受两个输入:

  • 一个月(1 <= m <= 120 <= m <= 11)(示例和测试用例全部按1索引编制)。
  • 在地球纬度(-2 <= p <= 2)的五个“位置组”中,-2南极是南极,-1不包括南极的0是南半球,赤道附近的热带1是北极,不包括北极的北半球2是北极。
    尽管当然北极,南极和热带仍然有季节,但是为了应对这一挑战,我们将说北极和南极处于恒定状态Winter,而热带则处于恒定状态Summer

这是这五个组的视觉表示,-2南极圈在哪里?-1在摩ri座和南极圈之间;0在摩ri座和癌症之间;1在北极圈和北回归线之间;和-2北极圈。

在此处输入图片说明在此处输入图片说明 资料来源:COSMOS-SAO天文学百科全书

输出:

SpringSummerAutumn,或者Winter,遵循以下规则:

  • 是位置输入2还是-2(北极或南极),总是输出Winter
  • 是位置输入0(热带),始终是输出Summer
  • 是位置输入1(北半球)的基础上,每月输入四季的输出之一:Springm = [3,5]); Summerm = [6,8]); Autumnm = [9,11]); Winterm = 12 or m = [1,2])。
  • 是位置输入-1(南半球)的基础上,每月输入四季的输出之一:Springm = [9,11]); Summerm = 12 or m = [1,2]); Autumnm = [3,5]); Winterm = [6,8])。

挑战规则:

  • 输出您所选择的指示任何四个不同的值SpringSummerAutumn,或Winter(请注明你在你的答案用什么)。
    -15字节的奖金,如果你输出SpringSummerAutumn,或Winter文本(不区分大小写,所以可以完全小写或完全大写为好,而不是使用标题情况下)。
  • 月份输入可以采用任何合理的格式。可以是0索引或1索引的整数,Date对象,Month-String等。
  • 位置输入将永远是这些可能的五个输入一个-2-1012

一般规则:

  • 这是,因此最短答案以字节为单位。
    不要让代码高尔夫球语言阻止您使用非代码高尔夫球语言发布答案。尝试针对“任何”编程语言提出尽可能简短的答案。
  • 标准规则适用于您的答案,因此允许您使用STDIN / STDOUT,具有正确参数的函数/方法和返回类型的完整程序。你的来电。
  • 默认漏洞是禁止的。
  • 如果可能的话,请添加一个带有测试代码的链接。
  • 另外,如有必要,请添加说明。

测试用例:

Position    1-indexed Month    Output

-2          8  (August)        Winter
-2          12 (December)      Winter
-1          3  (March)         Autumn
-1          5  (May)           Autumn
-1          8  (August)        Winter
-1          12 (December)      Summer
0           1  (January)       Summer
0           7  (July)          Summer
1           1  (January)       Winter
1           4  (April)         Spring
1           7  (July)          Summer
1           12 (December)      Winter
2           2  (February)      Winter
2           9  (September)     Winter

为什么我们不能只为季节使用四个不同的值?
暴民埃里克(Erik the Outgolfer)'18年

我确实读过那条规则,这就是为什么我问。另外,为什么还要担心“魔术整数计算”?
暴民埃里克(Erik the Outgolfer)'18年

我只看到计算并没有发现什么不好,无论如何它们很可能会用于索引。这是您的挑战,但我会说这是不必要的复杂性。编辑:关于复制,嗯,这实际上是无法避免的。
暴民埃里克(Erik the Outgolfer)'18年

2
我认为没有任何额外的好处,只要不将输出转换为这些字符串,该程序仍然可以正常工作。
暴民埃里克(Erik the Outgolfer)'18年

1
我认为抵消文本字节大小的字节奖励是完全可以的。这不是“如果您还执行其他任务,则可获得X点奖励”之一。挑战集中在季节周围,因此激励实际印刷季节是有意义的。
内森·美林

Answers:



6

Python 2,29个字节

lambda p,m:[0,m+6,6,m][p]/3%4

在线尝试!

GB的Ruby方法的一个端口,事实证明比我自己的要短几个字节:

32字节

lambda p,m:(p%2*(p+m/3+5)or p)%4

在线尝试!

一个匿名函数,以数字0到3的形式返回季节,它们按顺序代表夏季,秋季,冬季和春季。

至于打印实际的季节名称:

63-15 = 48字节

lambda p,m:"SAWSuuipmtnrmutiemenrnrg"[(p%2*(p+m/3+5)or p)%4::4]

在线尝试!

如果有人想要的话,有合并的字符串。


3

C(gcc)78 75(-15奖励)= 60字节

使用从1开始的月份。

编辑:重新排列了数学运算符,并将其简化。

f(m,a){puts("Summer\0Autumn\0Winter\0Spring"+7*(a*a&1?(++a+m/3)%4:2*!!a));}

在线尝试!


1
您可以使用(++a+m/3)%4→ 保存两个字节++a+m/3&3。另外,a*a恰好在什么时候是奇数a,所以检查a&1应该可以,不是吗?
林恩

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.