Déterminer la saison

11

Introduction:

Dans l' hémisphère nord (Europe, Amérique du Nord, etc.), les saisons sont réparties comme suit:
- printemps: mars, avril, mai
- été: juin, juillet, août
- automne: septembre, octobre, novembre
- hiver: décembre , Janvier février

Dans l' hémisphère sud , cependant ( à savoir l' Australie, Amérique du Sud, etc.), les saisons sont réparties comme suit:
- Printemps: Septembre, Octobre, Novembre
- Été: Décembre, Janvier, Février
- Automne: Mars, Avril, Mai
- Hiver: Juin Juillet aout

Cette différence est due à la position du soleil par rapport à l'équateur, où les hémisphères nord et sud ont des saisons opposées.

Contribution:

Dans ce défi, nous prendrons deux entrées:

  • Un pour le mois ( 1 <= m <= 12ou 0 <= m <= 11) (les exemples et les cas de test sont tous indexés 1).
  • Et un pour les cinq `` groupes de position '' aux latitudes de la Terre ( -2 <= p <= 2), où se -2trouve l'Antarctique, -1est l'hémisphère sud à l'exclusion de l'Antarctique, 0les Tropiques à proximité de l'équateur, 1l'hémisphère nord à l'exclusion de l'Arctique, et 2est L'arctic.
    Bien que l'Arctique, l'Antarctique et les Tropiques aient bien sûr des saisons, pour ce défi, nous dirons que l'Arctique et l'Antarctique sont dans un état constant Winteret les Tropiques dans un état constant Summer.

Voici une représentation visuelle de ces cinq groupes, où se -2trouve le cercle Antarctique; -1entre le tropique du Capricorne et le cercle Antarctique; 0entre le tropique du Capricorne et le tropique du Cancer; 1entre le cercle polaire arctique et le tropique du cancer; et -2le cercle polaire arctique.

entrez la description de l'image icientrez la description de l'image ici Source: COSMOS - L'Encyclopédie SAO d'astronomie

Production:

L' un des Spring, Summer, Autumnou Winter, suivant ces règles:

  • Est la position entrée 2ou -2(Arctique ou Antarctique), toujours sortie Winter.
  • Est l'entrée de position 0(Tropics), toujours sortie Summer.
  • Est la position entrée 1(hémisphère nord), sortie l'une des quatre saisons en fonction de l'entrée du mois: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2]).
  • Est la position entrée -1(hémisphère sud), sortie l'une des quatre saisons en fonction de l'entrée mois: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8]).

Règles du défi:

  • Sortie des quatre valeurs distinctes de votre choix indiquant Spring, Summer, Autumnou Winter(s'il vous plaît DEFINISSEZ vous avez utilisé dans votre réponse).
    -15 octets de bonus si vous sortie Spring, Summer, Autumnou Wintersous forme de texte (insensible à la casse, peut donc être entièrement en minuscules ou en majuscules et entièrement, au lieu du titre cas utilisé).
  • La saisie du mois peut être dans n'importe quel format raisonnable. Peut être un entier indexé 0 ou indexé 1, un objet Date, une chaîne Mois, etc.
  • Entrée de position sera toujours l' un de ces cinq possibles entrées -2, -1, 0, 1, 2.

Règles générales:

  • C'est le , donc la réponse la plus courte en octets l'emporte.
    Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation.
  • Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
  • Les failles par défaut sont interdites.
  • Si possible, veuillez ajouter un lien avec un test pour votre code.
  • Veuillez également ajouter une explication si nécessaire.

Cas de test:

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
la source
Pourquoi ne pouvons-nous pas simplement utiliser quatre valeurs distinctes pour les saisons?
Erik the Outgolfer
J'ai lu cette règle, c'est pourquoi j'ai demandé. Aussi, pourquoi avez-vous peur des "calculs d'entiers magiques"?
Erik the Outgolfer
Je ne vois rien de mal à ne voir que les calculs, ils seront de toute façon très probablement utilisés pour l'indexation. C'est votre défi, mais je dirais que c'est une complication inutile. EDIT: sur la copie, eh bien, ce n'est pas vraiment évitable.
Erik the Outgolfer
2
Je ne pense pas que des bonus soient nécessaires, le programme fonctionne toujours s'il ne convertit tout simplement pas la sortie en ces chaînes.
Erik the Outgolfer
1
Je pense que les bonus d'octets pour compenser la taille d'octet du texte sont tout à fait corrects. Ce n'est pas un de ces "points X bonus si vous effectuez également cette autre tâche". Le défi est centré sur les saisons, il est donc logique d'inciter réellement à imprimer les saisons.
Nathan Merrill

Réponses:

6

Python 2 , 29 octets

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

Essayez-le en ligne!

Un port de l'approche Ruby de GB , qui s'est avéré être quelques octets plus court que le mien:

32 octets

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

Essayez-le en ligne!

Une fonction anonyme qui renvoie les saisons sous forme de chiffres de 0 à 3, où elles représentent l'été, l'automne, l'hiver et le printemps dans cet ordre.

Quant à l'impression des noms de saison réels:

63 - 15 = 48 octets

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

Essayez-le en ligne!

Il y a la chaîne combinée si quelqu'un le veut.

Jo King
la source
3

C (gcc) , 78 75 (-15 bonus) = 60 octets

Utilisation de 1 mois.

Edit: Réorganisé les opérateurs mathématiques et réduit.

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

Essayez-le en ligne!

ErikF
la source
1
Vous pouvez enregistrer deux octets avec (++a+m/3)%4++a+m/3&3. En outre, a*aest-il étrange précisément quand a, donc la vérification a&1devrait être bonne, non?
Lynn