Determinar la temporada

11

Introducción:

En el hemisferio norte (es decir, Europa, América del Norte, etc.), las estaciones se dividen así:
- Primavera: marzo, abril, mayo
- Verano: junio, julio, agosto
- Otoño: septiembre, octubre, noviembre
- Invierno: diciembre , Enero febrero

En el hemisferio sur , sin embargo (por ejemplo, Australia, América del Sur, etc.), las estaciones se dividen así:
- Primavera: Septiembre, Octubre, Noviembre
- Verano: diciembre enero, febrero
- Otoño: marzo, abril, mayo
- Invierno: Junio ​​Julio Agosto

Esta diferencia se debe a la posición del sol con respecto al ecuador, donde los hemisferios norte y sur tienen estaciones opuestas.

Entrada:

En este desafío, tomaremos dos entradas:

  • Uno para el mes ( 1 <= m <= 12o 0 <= m <= 11) (los ejemplos y los casos de prueba están todos indexados en 1).
  • Y uno para los cinco 'grupos de posición' en las latitudes de la Tierra ( -2 <= p <= 2), donde -2está la Antártida, -1es el hemisferio sur excluyendo la Antártida, 0son los Trópicos en la proximidad del ecuador, 1es el hemisferio norte excluyendo el Ártico, y 2es el Artico.
    Aunque el Ártico, el Antártico y los Trópicos, por supuesto, todavía tienen estaciones, por el bien de este desafío, diremos que el Ártico y el Antártico están en un estado constante de Winter, y los Trópicos están en un estado constante de Summer.

Aquí una representación visual de estos cinco grupos, donde se -2encuentra el Círculo Antártico; -1entre el trópico de Capricornio y el círculo antártico; 0entre el Trópico de Capricornio y el Trópico de Cáncer; 1entre el Círculo Polar Ártico y el Trópico de Cáncer; y -2el círculo polar ártico.

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí Fuente: COSMOS - La Enciclopedia SAO de Astronomía

Salida:

Uno de Spring, Summer, Autumn, o Winter, siguiendo estas reglas:

  • Es la entrada de posición 2o -2(Ártico o Antártico), siempre salida Winter.
  • Es la entrada de posición 0(trópicos), siempre salida Summer.
  • Es la entrada de posición 1(hemisferio norte), salida de una de las cuatro estaciones en función de la entrada del mes: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2])
  • Es la entrada de posición -1(hemisferio sur), salida de una de las cuatro estaciones en función de la entrada del mes: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8])

Reglas de desafío:

  • Salida de cualquiera de los cuatro valores distintos de su elección que indican Spring, Summer, Autumn, o Winter(favor especifique que usted ha utilizado en su respuesta).
    -15 bytes bonificación , si se imprime Spring, Summer, Autumn, o Wintercomo texto (entre mayúsculas y minúsculas, por lo que puede estar totalmente en minúsculas o totalmente en mayúsculas, así, en lugar del título de los casos se usa).
  • La entrada del mes puede estar en cualquier formato razonable. Puede ser un entero indexado o indexado 0, un objeto de fecha, una cadena de mes, etc.
  • Entrada de posición siempre será uno de estos posibles cinco entradas -2, -1, 0, 1, 2.

Reglas generales:

  • Este es el , por lo que la respuesta más corta en bytes gana.
    No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación.
  • Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
  • Las lagunas predeterminadas están prohibidas.
  • Si es posible, agregue un enlace con una prueba para su código.
  • Además, agregue una explicación si es necesario.

Casos de prueba:

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
fuente
¿Por qué no podemos usar solo cuatro valores distintos para las estaciones?
Erik the Outgolfer
Leí esa regla, por eso pregunté. Además, ¿por qué tienes miedo de los "cálculos de enteros mágicos"?
Erik the Outgolfer
No veo nada malo con solo ver cálculos, de todos modos es muy probable que se usen para indexar. Es tu desafío, pero diría que es una complicación innecesaria. EDITAR: sobre copiar, bueno, eso no es realmente evitable.
Erik the Outgolfer
2
No creo que sea necesario ningún bono, el programa aún funciona si simplemente no convierte la salida a esas cadenas.
Erik the Outgolfer
1
Creo que las bonificaciones de bytes para compensar el tamaño de bytes del texto están totalmente bien. No es uno de esos "puntos de bonificación X si también haces esta otra tarea". El desafío se centra en las estaciones, por lo que tiene sentido incentivar la impresión de las estaciones.
Nathan Merrill

Respuestas:

10

Rubí , 33 27 25 bytes

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

Pruébalo en línea!

Los valores de retorno son:

0 -> invierno

1 -> primavera

2 -> verano

3 -> otoño

GB
fuente
6

Python 2 , 29 bytes

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

Pruébalo en línea!

Un puerto del enfoque Ruby de GB , que resultó ser unos pocos bytes más corto que el mío:

32 bytes

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

Pruébalo en línea!

Una función anónima que devuelve las estaciones como los números del 0 al 3, donde representan verano, otoño, invierno y primavera en ese orden.

En cuanto a imprimir los nombres de temporada reales:

63-15 = 48 bytes

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

Pruébalo en línea!

Existe la cadena combinada si alguien lo quiere.

Jo King
fuente
3

C (gcc) , 78 75 (-15 bonus) = 60 bytes

Usando meses basados ​​en 1.

Editar: Operadores matemáticos reorganizados y reducidos.

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

Pruébalo en línea!

ErikF
fuente
1
Puede guardar dos bytes con (++a+m/3)%4++a+m/3&3. Además, a*aes extraño exactamente cuando lo aes, por lo que la comprobación a&1debería estar bien, ¿no?
Lynn