Определить сезон


11

Вступление:

В северном полушарии (т. Е. В Европе, Северной Америке и т. Д.) Времена года разделены следующим образом:
- весна: март, апрель, май
- лето: июнь, июль, август
- осень: сентябрь, октябрь, ноябрь
- зима: декабрь , Январь Февраль

Однако в южном полушарии (например, в Австралии, Южной Америке и т. Д.) Времена года разделены следующим образом:
- весна: сентябрь, октябрь, ноябрь
- лето: декабрь, январь, февраль
- осень: март, апрель, май
- зима: Июнь Июль Август

Это различие связано с положением солнца относительно экватора, где северное и южное полушария имеют противоположные времена года.

Входные данные:

В этой задаче мы возьмем два входа:

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

Здесь наглядное представление этих пяти групп, где -2находится Северный полярный круг; -1между тропиком Козерога и Южным полярным кругом; 0между тропиком козерога и тропиком рака; 1между Северным полярным кругом и тропиком Рака; и -2полярный круг.

введите описание изображения здесьвведите описание изображения здесь Источник: COSMOS - Энциклопедия САО по астрономии

Выход:

Один из 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 индексом, Date-object, Month-String и т. Д.
  • Вход Позиции всегда будет один из этих возможных пяти входов -2, -1, 0, 1, 2.

Основные правила:

  • Это , поэтому выигрывает самый короткий ответ в байтах.
    Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования.
  • К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
  • По умолчанию лазейки запрещены.
  • Если возможно, добавьте ссылку с тестом для вашего кода.
  • Также, пожалуйста, добавьте объяснение, если это необходимо.

Тестовые случаи:

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

Почему мы не можем просто использовать четыре разных значения для сезонов?
— Эрик Outgolfer

Я прочитал это правило, поэтому я и спросил. Кроме того, почему вы боитесь "магических целочисленных вычислений"?
— Эрик Outgolfer

Я не вижу ничего плохого в том, чтобы видеть только вычисления, они, скорее всего, все равно будут использоваться для индексации. Это ваш вызов, но я бы сказал, что это ненужное осложнение. РЕДАКТИРОВАТЬ: о копировании, ну, это не совсем избежать.
— Эрик Outgolfer

2
Я не думаю, что какие-либо бонусы необходимы, программа все еще работает, если она просто не конвертирует вывод в эти строки.
— Эрик Outgolfer

1
Я думаю, что байтовые бонусы, чтобы компенсировать размер текста в байтах, вполне хороши. Это не один из тех «бонусных баллов X, если вы также выполняете эту другую задачу». Задача сосредоточена вокруг сезонов, поэтому имеет смысл стимулировать фактическую печать сезонов.
— Натан Меррилл,

Ответы:



6

Python 2 , 29 байт

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

Попробуйте онлайн!

Подход Ruby от 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.