Określ sezon

11

Wprowadzenie:

Na półkuli północnej (tj. W Europie, Ameryce Północnej itp.) Pory roku są podzielone w następujący sposób:
- Wiosna: marzec, kwiecień, maj
- Lato: czerwiec, lipiec, sierpień
- Jesień: wrzesień, październik, listopad
- Zima: grudzień , Styczeń luty

Jednak na półkuli południowej (tj. W Australii, Ameryce Południowej itp.) Pory roku są podzielone w następujący sposób:
- Wiosna: wrzesień, październik, listopad
- Lato: grudzień, styczeń, luty
- Jesień: marzec, kwiecień, maj
- Zima: Czerwiec lipiec sierpień

Różnica wynika z położenia słońca względem równika, gdzie półkule północna i południowa mają przeciwne pory roku.

Wejście:

W tym wyzwaniu weźmiemy dwa dane wejściowe:

  • Jeden za miesiąc ( 1 <= m <= 12lub 0 <= m <= 11) (przykłady i przypadki testowe są indeksowane 1).
  • I jeden do pięciu pozycji „grup” na szerokościach geograficznych Ziemi ( -2 <= p <= 2), gdzie -2jest Antarktyka, -1jest półkula południowa wyłączeniem Antarktyka, 0są Tropics w pobliżu równika, 1jest północna półkula wyjątkiem Arktyki i 2jest Arktyka.
    Chociaż Arktyka, Antarktyda i Tropiki oczywiście mają jeszcze pory roku, w związku z tym wyzwaniem powiemy, że Arktyka i Antarktyda są w stałym stanie Winter, a tropik jest w stałym stanie Summer.

Oto wizualna reprezentacja tych pięciu grup, gdzie -2jest Koło Antarktyczne; -1między zwrotnikiem koziorożca i kołem antarktycznym; 0między Zwrotnikiem Koziorożca i Zwrotnikiem Raka; 1między kołem podbiegunowym a zwrotnikiem raka; i -2koło podbiegunowe.

wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj Źródło: COSMOS - Encyklopedia astronomii SAO

Wynik:

Jednym z Spring, Summer, Autumn, lub Winter, po tych zasad:

  • Jest wejściową pozycją 2lub -2(arktyczną lub antarktyczną), zawsze wyjściową Winter.
  • Czy wejście pozycji 0(zwrotniki), zawsze wyjście Summer.
  • Czy wejście pozycji 1(półkula północna), wyjście jednego z czterech sezonów na podstawie danych wejściowych miesiąca: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2]).
  • Czy wejście pozycji -1(półkula południowa), wyjście jednego z czterech sezonów w oparciu o dane miesiąca: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8]).

Zasady konkursu:

  • Wyprowadzać cztery odrębne wartości wyboru wskazujące Spring, Summer, Autumn, lub Winter(proszę podać, co już używany w odpowiedzi).
    -15 bajty premię jeśli wyjście Spring, Summer, Autumn, lub Winterjako tekst (wielkość liter, więc może być w pełni małe lub wielkie, jak również w pełni, zamiast używanych tytułowej przypadku).
  • Dane miesięczne mogą mieć dowolny rozsądny format. Może być liczbą całkowitą 0 lub 1, obiektem daty, ciągiem miesiąca itp.
  • Wejście pozycja zawsze będzie jednym z tych możliwych pięciu wejść -2, -1, 0, 1, 2.

Główne zasady:

  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach.
    Nie pozwól, aby języki kod-golfowe zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania.
  • Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
  • Domyślne luki są zabronione.
  • Jeśli to możliwe, dodaj link z testem swojego kodu.
  • W razie potrzeby dodaj również wyjaśnienie.

Przypadki testowe:

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
źródło
Dlaczego nie możemy po prostu użyć czterech różnych wartości dla pór roku?
Erik the Outgolfer
Przeczytałem tę zasadę, dlatego zapytałem. Ponadto, dlaczego boicie się „obliczeń typu magiczna liczba całkowita”?
Erik the Outgolfer
Nie widzę nic złego w samych tylko obliczeniach, i tak najprawdopodobniej zostaną one wykorzystane do indeksowania. To twoje wyzwanie, ale powiedziałbym, że to niepotrzebna komplikacja. EDYCJA: o kopiowaniu, cóż, tak naprawdę nie da się tego uniknąć.
Erik the Outgolfer
2
Nie sądzę, aby jakieś bonusy były konieczne, program nadal działa, jeśli po prostu nie konwertuje danych wyjściowych na te ciągi.
Erik the Outgolfer
1
Myślę, że premie bajtowe w celu wyrównania wielkości bajtu tekstu są całkowicie w porządku. To nie jest jeden z tych „punktów bonusowych X, jeśli wykonasz to inne zadanie”. Wyzwanie koncentruje się wokół pór roku, więc sensowne jest zachęcanie do faktycznego drukowania pór roku.
Nathan Merrill

Odpowiedzi:

10

Ruby , 33 27 25 bajtów

->m,l{[6,m,0,m+6][l]/3%4}

Wypróbuj online!

Zwracane wartości to:

0 -> zima

1 -> wiosna

2 -> lato

3 -> jesień

GB
źródło
6

Python 2 , 29 bajtów

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

Wypróbuj online!

Port podejścia Ruby GB , który okazał się kilka bajtów krótszy od mojego:

32 bajty

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

Wypróbuj online!

Anonimowa funkcja, która zwraca pory roku jako liczby od 0 do 3, gdzie reprezentują lato, jesień, zimę i wiosnę w tej kolejności.

Jeśli chodzi o drukowanie rzeczywistych nazw sezonów:

63 - 15 = 48 bajtów

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

Wypróbuj online!

Jeśli ktoś tego chce, jest połączony ciąg.

Jo King
źródło
3

C (gcc) , 78 75 (premia -15) = 60 bajtów

Korzystanie z miesięcy opartych na 1.

Edycja: Przestawiono operatory matematyczne i zmniejszono.

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

Wypróbuj online!

ErikF
źródło
1
Możesz zapisać dwa bajty za pomocą (++a+m/3)%4++a+m/3&3. Poza tym, a*adziwne ajest, kiedy jest, więc sprawdzanie a&1powinno być w porządku, nie?
Lynn