Determinar a estação

11

Introdução:

No hemisfério norte (Europa, América do Norte etc.), as estações são divididas assim:
- Primavera: março, abril, maio
- verão: junho, julho, agosto
- outono: setembro, outubro, novembro
- inverno: dezembro , Janeiro fevereiro

No hemisfério sul, no entanto (Austrália, América do Sul etc.), as estações são divididas assim:
- Primavera: setembro, outubro, novembro
- verão: dezembro, janeiro, fevereiro
- outono: março, abril, maio
- inverno: Junho julho Agosto

Essa diferença se deve à posição do sol em relação ao equador, onde os hemisférios norte e sul têm estações opostas.

Entrada:

Neste desafio, tomaremos duas entradas:

  • Um para o mês ( 1 <= m <= 12ou 0 <= m <= 11) (exemplos e casos de teste são todos com 1 índice).
  • E um para os cinco "grupos de posições" nas latitudes da Terra ( -2 <= p <= 2), onde -2é o Antártico, -1é o hemisfério sul excluindo o Antártico, 0são os trópicos nas proximidades do equador, 1é o hemisfério norte excluindo o Ártico e 2é o Ártico.
    Embora o Ártico, o Antártico e os Trópicos, claro, ainda tenham estações, para o bem desse desafio, diremos que o Ártico e o Antártico estão em um estado constante de Winter, e os Trópicos estão em um estado constante de Summer.

Aqui está uma representação visual desses cinco grupos, onde -2fica o Círculo Antártico; -1entre o Trópico de Capricórnio e o Círculo Antártico; 0entre o Trópico de Capricórnio e o Trópico de Câncer; 1entre o Círculo Polar Ártico e o Trópico de Câncer; e -2o círculo ártico.

insira a descrição da imagem aquiinsira a descrição da imagem aqui Fonte: COSMOS - A Enciclopédia SAO de Astronomia

Resultado:

Um dos Spring, Summer, Autumn, ou Winter, seguindo estas regras:

  • É a posição de entrada 2ou -2(Ártico ou Antártico), sempre saída Winter.
  • É a posição de entrada 0(trópicos), sempre saída Summer.
  • É a entrada de posição 1(hemisfério norte), produz uma das quatro estações do ano com base na entrada do mês: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2])
  • É a entrada de posição -1(hemisfério sul), produz uma das quatro estações do ano com base na entrada do mês: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8])

Regras do desafio:

  • Saída de qualquer quatro valores distintos de sua escolha, indicando Spring, Summer, Autumn, ou Winter(por favor, indicar o que você já usou em sua resposta).
    -15 bytes bônus se você saída Spring, Summer, Autumn, ou Wintercomo texto (maiúsculas e minúsculas, por isso pode ser totalmente minúsculas ou totalmente em maiúsculas, bem como, em vez do título de caso de uso).
  • A entrada do mês pode estar em qualquer formato razoável. Pode ser um número inteiro com índice 0 ou 1, objeto Data, String mês, etc.
  • Entrada de posição será sempre uma dessas possíveis cinco entradas -2, -1, 0, 1, 2.

Regras gerais:

  • Isso é , então a resposta mais curta em bytes vence.
    Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação.
  • As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
  • As brechas padrão são proibidas.
  • Se possível, adicione um link com um teste para o seu código.
  • Além disso, adicione uma explicação, se necessário.

Casos de teste:

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
fonte
Por que não podemos simplesmente usar quatro valores distintos para as estações do ano?
Erik the Outgolfer
Eu li essa regra, foi por isso que perguntei. Além disso, por que você tem medo de "cálculos de número inteiro mágico"?
Erik the Outgolfer
Não vejo nada de ruim em ver apenas cálculos; eles provavelmente serão usados ​​para indexação de qualquer maneira. É o seu desafio, mas eu diria que é uma complicação desnecessária. EDIT: sobre copiar, bem, isso não é realmente evitável.
Erik the Outgolfer
2
Eu não acho que nenhum bônus seja necessário, o programa ainda funcionará se simplesmente não converter a saída para essas strings.
Erik the Outgolfer
1
Eu acho que os bônus de bytes para compensar o tamanho de bytes do texto estão totalmente corretos. Não é um daqueles "pontos X de bônus se você também fizer essa outra tarefa". O desafio está centrado nas estações, por isso faz sentido incentivar a impressão das estações.
Nathan Merrill

Respostas:

10

Ruby , 33 27 25 bytes

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

Experimente online!

Os valores de retorno são:

0 -> inverno

1 -> primavera

2 -> verão

3 -> outono

GB
fonte
6

Python 2 , 29 bytes

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

Experimente online!

Uma porta da abordagem Ruby da GB , que acabou sendo alguns bytes menor que a minha:

32 bytes

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

Experimente online!

Uma função anônima que retorna as estações como os números de 0 a 3, onde elas representam verão, outono, inverno e primavera nessa ordem.

Quanto à impressão dos nomes reais da estação:

63 - 15 = 48 bytes

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

Experimente online!

Existe a sequência combinada, se alguém quiser.

Brincadeira
fonte
3

C (gcc) , 78 75 (bônus -15) = 60 bytes

Usando meses baseados em 1.

Edit: Operadores matemáticos reorganizados e reduzidos.

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

Experimente online!

ErikF
fonte
1
Você pode salvar dois bytes com (++a+m/3)%4++a+m/3&3. Além disso, a*aé estranho exatamente quando a, então a verificação a&1deve ser boa, não?
Lynn