シーズンを決定


11

前書き:

では北半球(すなわち、ヨーロッパ、北米など)、季節は次のように分かれています:
- 春: 3月、4月、5月
- 夏: 6月、7月、8月
- 秋: 9月、10月、11月
- 冬: 12月、 一月二月

南半球しかし(すなわちオーストラリア、南米など)、季節は次のように分かれています:
- 春: 9月、10月、11月
- 夏: 12月、1月、2月
- 秋: 3月、4月、5月
- 冬: 6月、7月、8月

この違いは、北半球と南半球が反対の季節を持つ赤道に関する太陽の位置によるものです。

入力:

この課題では、2つの入力を使用します。

  • 月に1つ(1 <= m <= 12または0 <= m <= 11)(例とテストケースはすべて1から始まる)。
  • そして、地球(の緯度の5 '位の-グループのための1 -2 <= p <= 2)、-2南極では、-1南極を除く南半球、ある0熱帯赤道の近くに、ある1北極を除く北半球では、と2あります北極の。
    もちろん、北極、南極、および熱帯地方にはまだ季節がありますが、この挑戦​​のために、北極と南極は一定の状態にWinterあり、熱帯地方は一定の状態にあると言いますSummer

ここで-2は、これらの5つのグループを視覚的に表現しています。-1南回帰線と南極圏の間; 0山羊座の熱帯とがんの熱帯の間; 1北極圏とがんの熱帯地方の間; そして-2北極圏。

ここに画像の説明を入力してくださいここに画像の説明を入力してください 出典:COSMOS-The SAO Encyclopedia of Astronomy

出力:

SpringSummerAutumn、またはWinter、これらのルールを次のよう:

  • 位置入力2または-2(北極または南極)、常にoutput Winterです。
  • 位置入力0(トロピック)、常にoutput Summerです。
  • 位置入力1(北半球)で、月入力に基づいて4つの季節の1つを出力しますSpring((m = [3,5]); Summerm = [6,8]); Autumnm = [9,11]); Winterm = 12 or m = [1,2])。
  • 位置入力-1(南半球)で、月入力に基づいて4つの季節の1つを出力しますSpring((m = [9,11]); Summerm = 12 or m = [1,2]); Autumnm = [3,5]); Winterm = [6,8])。

チャレンジルール:

  • 出力を示すあなたの選択の任意の4つの異なる値SpringSummerAutumn、またはWinter(あなたがあなたの答えに使用してきたものを明記してください)。
    -15ボーナスをバイト君出力場合はSpringSummerAutumn、またはWinterテキストとして(大文字と小文字を区別しないので、完全に代わりに使用タイトルの場合の、だけでなく、完全に大文字小文字またはすることができます)。
  • 月の入力は、任意の妥当な形式にすることができます。0インデックス付きまたは1インデックス付き整数、日付オブジェクト、月文字列などを指定できます。
  • 位置入力は、常にこれらの可能な5つの入力のいずれかになります-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

季節ごとに4つの異なる値を使用できないのはなぜですか?
エリックアウトゴルファー

私はそのルールを読みました。だから私は尋ねました。また、なぜ「魔法の整数計算」が怖いのですか?
エリックアウトゴルファー

計算だけを見ても何も悪いことはありませんが、とにかくインデックス作成に使用される可能性が高いでしょう。それはあなたの挑戦ですが、これは不必要な複雑さだと思います。編集:コピーについては、まあ、それは実際に避けることはできません。
エリックアウトゴルファー

2
ボーナスは必要ないと思いますが、出力をこれらの文字列に変換しない場合でもプログラムは動作します。
エリックアウトゴルファー

1
テキストのバイトサイズを相殺するためのバイトボーナスはまったく問題ないと思います。それは、「この他のタスクも実行する場合のボーナスXポイント」の1つではありません。課題は季節に集中しているため、実際に季節を印刷することを奨励することは理にかなっています。
ネイサンメリル

回答:



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→で2バイト保存できます++a+m/3&3。また、a*a正確なタイミングは奇妙aであるため、チェックa&1は問題ないはずです。
リン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.