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

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:



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.


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!


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.