Визначте сезон


11

Вступ:

У північній півкулі (тобто Європі, Північній Америці тощо) сезони поділяються так:
- Весна: березень, квітень, травень
- літо: червень, липень, серпень
- осінь: вересень, жовтень, листопад
- зима: грудень , Січень лютий

Однак у південній півкулі (наприклад, в Австралії, Південній Америці тощо) сезони поділяються так:
- Весна: вересень, жовтень, листопад
- літо: грудень, січень, лютий
- осінь: березень, квітень, травень
- зима: Червень, липень, серпень

Ця різниця обумовлена ​​положенням сонця щодо екватора, де північна та південна півкулі мають протилежні пори року.

Вхід:

У цьому виклику ми візьмемо два входи:

  • Один за місяць ( 1 <= m <= 12або 0 <= m <= 11) (приклади та тестові випадки - це 1-індексація).
  • І одна з п’яти "груп позицій" на широтах Землі ( -2 <= p <= 2), де -2знаходиться Антарктида, -1- південна півкуля, виключаючи Антарктику, 0є тропіки в районі екватора, 1північна півкуля, виключаючи Арктику, і 2є Арктика.
    Хоча Арктика, Антарктика та Тропіки, звичайно, все ще мають сезони, задля цього виклику ми скажемо, що Арктика та Антарктика перебувають у постійному стані Winter, а Тропіки у постійному стані Summer.

Ось наочне зображення цих п’яти груп, де -2знаходиться Антарктичне коло; -1між Тропіком Козерога та Антарктичним колом; 0між Тропіком Козерога і Тропіком Раку; 1між Полярним колом та Тропіком раку; і -2Полярне коло.

введіть тут опис зображеннявведіть тут опис зображення Джерело: COSMOS - Енциклопедія астрономії SAO

Вихід:

Один з Spring, Summer, Autumnабо Winter, слідуючи цим правилам:

  • Чи завжди введення позиції 2або -2(Арктика чи Антарктика) Winter.
  • Чи 0завжди вхід позиції (тропіки) Summer.
  • Чи є вхід позиції 1(північна півкуля), вихід один з чотирьох сезонів, виходячи з введення місяця: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2]).
  • Чи є вхід позиції -1(південна півкуля), вихід один з чотирьох сезонів, виходячи з місячного введення: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8]).

Правила виклику:

  • Вихід будь-які чотири різних значення за вашим вибором з зазначенням Spring, Summer, Autumnабо Winter(будь ласка , вкажіть , що ви використовували в своїй відповіді).
    -15 байти бонусу , якщо ви виводите Spring, Summer, Autumnабо в Winterвигляді тексту (без урахування регістру, тому можете бути повністю малими або повністю в верхньому регістрі , а також, замість використаного титульного випадку).
  • Введення за місяць може бути у будь-якому розумному форматі. Може бути або 0-індексованим, або 1-індексованим цілим числом, об’єктом дати, місяцем-рядком тощо
  • Вхід Позиції завжди буде один з цих можливих п'яти входів -2, -1, 0, 1, 2.

Загальні правила:

  • Це , тому найкоротша відповідь у байтах виграє.
    Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з не кодовими гольф-мовами. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування.
  • Стандартні правила застосовуються до вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу return. Твій дзвінок.
  • Лазівки за замовчуванням заборонені.
  • Якщо можливо, додайте посилання з тестом для вашого коду.
  • Також, будь ласка, додайте пояснення, якщо це необхідно.

Тестові приклади:

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

Чому ми не можемо просто використати чотири різних значення за сезонами?
Ерік Аутгольфер

Я прочитав це правило, тому я і запитав. Крім того, чому ти боїшся "магічно-цілих обчислень"?
Ерік Аутгольфер

Я не бачу нічого поганого в тому, що бачу лише обчислення, вони, швидше за все, будуть використані для індексування. Це ваше завдання, але я б сказав, що це зайве ускладнення. EDIT: про копіювання, ну, це не дуже можливо уникнути.
Ерік Аутгольфер

2
Я не думаю, що бонуси не потрібні, програма все одно працює, якщо вона просто не перетворює вихід у ці рядки.
Ерік Аутгольфер

1
Я думаю, що байтові бонуси для компенсації розміру тексту байтів є абсолютно чудовими. Це не один із таких "бонусних X балів, якщо ви також виконуєте це інше завдання". Проблема зосереджена навколо сезонів, тому має сенс стимулювати насправді друк сезонів.
Натан Мерріл

Відповіді:



6

Python 2 , 29 байт

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

Спробуйте в Інтернеті!

Порт GB-підходу Рубі , який виявився на кілька байт коротшим, ніж мій власний:

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++a+m/3&3. Крім того, a*aдивно, коли aсаме, тому перевірка a&1повинна бути добре, ні?
Лінн

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.