Bestimmen Sie die Jahreszeit

11

Einführung:

Auf der Nordhalbkugel (dh Europa, Nordamerika usw.) sind die Jahreszeiten folgendermaßen unterteilt:
- Frühling: März, April, Mai
- Sommer: Juni, Juli, August
- Herbst: September, Oktober, November
- Winter: Dezember , Januar Februar

In der südlichen Hemisphäre (dh Australien, Südamerika usw.) sind die Jahreszeiten jedoch wie folgt unterteilt:
- Frühling: September, Oktober, November
- Sommer: Dezember, Januar, Februar
- Herbst: März, April, Mai
- Winter: Juni Juli August

Dieser Unterschied ist auf die Position der Sonne in Bezug auf den Äquator zurückzuführen, wo die nördliche und südliche Hemisphäre unterschiedliche Jahreszeiten haben.

Eingang:

Bei dieser Herausforderung nehmen wir zwei Eingaben vor:

  • Eine für den Monat ( 1 <= m <= 12oder 0 <= m <= 11) (Beispiele und Testfälle sind alle 1-indiziert).
  • Und eine für die fünf 'Positionsgruppen' in den Breiten der Erde ( -2 <= p <= 2), wo -2sich die Antarktis befindet, -1ist die südliche Hemisphäre ohne die Antarktis, 0sind die Tropen in der Nähe des Äquators, 1ist die nördliche Hemisphäre ohne die Arktis und 2ist die Arktis.
    Obwohl die Arktis, die Antarktis und die Tropen natürlich noch Jahreszeiten haben, werden wir für diese Herausforderung sagen, dass sich die Arktis und die Antarktis in einem konstanten Zustand befinden Winterund die Tropen in einem konstanten Zustand von Summer.

Hier eine visuelle Darstellung dieser fünf Gruppen, wo -2sich der Polarkreis befindet; -1zwischen dem Tropen des Steinbocks und dem Polarkreis; 0zwischen dem Tropic of Capricorn und dem Tropic of Cancer; 1zwischen dem Polarkreis und Tropic of Cancer; und -2der Polarkreis.

Geben Sie hier die Bildbeschreibung einGeben Sie hier die Bildbeschreibung ein Quelle: COSMOS - Die SAO-Enzyklopädie der Astronomie

Ausgabe:

Einer von Spring, Summer, Autumnoder Winter, nach diesen Regeln:

  • Ist die Position eingegeben 2oder -2(Arktis oder Antarktis), immer ausgegeben Winter.
  • Ist die Positionseingabe 0(Tropen), immer ausgegeben Summer.
  • Ist die Positionseingabe 1(nördliche Hemisphäre), Ausgabe einer der vier Jahreszeiten basierend auf der Monatseingabe: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2]).
  • Ist die Positionseingabe -1(südliche Hemisphäre), Ausgabe einer der vier Jahreszeiten basierend auf der Monatseingabe: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8]).

Herausforderungsregeln:

  • Ausgang alle vier verschiedene Werte Ihrer Wahl anzeigt Spring, Summer, Autumn, oder Winter(bitte angeben , was Sie in Ihrer Antwort verwendet haben).
    Bonus -15 Bytes , wenn Sie Ausgang Spring, Summer, Autumn, oder Winterals Text (Groß- und Kleinschreibung, so können vollständig Klein oder vollständig Groß- als auch anstelle des gebrauchten Titel-Falles).
  • Die Monatseingabe kann in jedem vernünftigen Format erfolgen. Kann entweder eine 0-indizierte oder eine 1-indizierte Ganzzahl, ein Datumsobjekt, eine Monatszeichenfolge usw. sein.
  • Positionseingabe wird immer eines dieser möglichen fünf Eingänge sein -2, -1, 0, 1, 2.

Allgemeine Regeln:

  • Dies ist , also gewinnt die kürzeste Antwort in Bytes.
    Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden.
  • Für Ihre Antwort gelten Standardregeln , sodass Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden dürfen. Ihr Anruf.
  • Standardschlupflöcher sind verboten.
  • Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code hinzu.
  • Fügen Sie bei Bedarf auch eine Erklärung hinzu.

Testfälle:

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
Kevin Cruijssen
quelle
Warum können wir nicht einfach vier verschiedene Werte für die Jahreszeiten verwenden?
Erik der Outgolfer
Ich habe diese Regel gelesen, deshalb habe ich gefragt. Warum haben Sie auch Angst vor "Magic-Integer-Berechnungen"?
Erik der Outgolfer
Ich sehe nichts Schlechtes daran, nur Berechnungen zu sehen, sie werden höchstwahrscheinlich sowieso für die Indizierung verwendet. Es ist Ihre Herausforderung, aber ich würde sagen, dass dies eine unnötige Komplikation ist. EDIT: über das Kopieren, na ja, das ist nicht wirklich vermeidbar.
Erik der Outgolfer
2
Ich denke nicht, dass irgendwelche Boni notwendig sind, das Programm funktioniert immer noch, wenn es die Ausgabe einfach nicht in diese Zeichenfolgen konvertiert.
Erik der Outgolfer
1
Ich denke, dass Byte-Boni zum Ausgleichen der Bytegröße von Text völlig in Ordnung sind. Es ist nicht einer dieser "Bonus X Punkte, wenn Sie auch diese andere Aufgabe erledigen". Die Herausforderung konzentriert sich auf die Jahreszeiten, daher ist es sinnvoll, Anreize zu schaffen, die Jahreszeiten tatsächlich zu drucken.
Nathan Merrill

Antworten:

6

Python 2 , 29 Bytes

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

Probieren Sie es online aus!

Ein Port des Ruby-Ansatzes von GB , der sich als einige Bytes kürzer als mein eigener herausstellte:

32 Bytes

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

Probieren Sie es online aus!

Eine anonyme Funktion, die die Jahreszeiten als Zahlen 0 bis 3 zurückgibt, wobei sie Sommer, Herbst, Winter und Frühling in dieser Reihenfolge darstellen.

Zum Drucken der tatsächlichen Saisonnamen:

63 - 15 = 48 Bytes

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

Probieren Sie es online aus!

Es gibt die kombinierte Zeichenfolge, wenn jemand es will.

Scherzen
quelle
3

C (gcc) , 78 75 (-15 Bonus) = 60 Bytes

Verwenden von 1-basierten Monaten.

Bearbeiten: Mathematische Operatoren neu angeordnet und reduziert.

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

Probieren Sie es online aus!

ErikF
quelle
1
Sie können zwei Bytes mit (++a+m/3)%4→ speichern ++a+m/3&3. Ist a*aes auch seltsam, wann genau a, also a&1sollte die Überprüfung in Ordnung sein, nein?
Lynn