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

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


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.


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!


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.