Determina la stagione


11

Introduzione:

Nel nell'emisfero nord (cioè Europa, Nord America, ecc), le stagioni sono divisi in questo modo:
- Primavera: Marzo, Aprile, Maggio
- Estate: Giugno, Luglio, Agosto
- Autunno: settembre, ottobre, novembre
- Inverno: Dicembre , Gennaio febbraio

Nel sud del mondo però (ovvero Australia, Sud America, ecc), le stagioni sono divisi in questo modo:
- Primavera: Settembre, Ottobre, Novembre
- Estate: Dicembre, Gennaio, Febbraio
- Autunno: Marzo, Aprile, Maggio
- Inverno: Giugno luglio agosto

Questa differenza è dovuta alla posizione del sole rispetto all'equatore, dove gli emisferi nord e sud hanno stagioni opposte.

Ingresso:

In questa sfida, prenderemo due input:

  • Uno per il mese ( 1 <= m <= 12o 0 <= m <= 11) (esempi e casi di test sono tutti indicizzati 1).
  • E uno per i cinque "gruppi di posizione" alle latitudini della Terra ( -2 <= p <= 2), dove si -2trova l'Antartico, -1è l'emisfero sud che esclude l'Antartico, 0sono i Tropici in prossimità dell'equatore, 1è l'emisfero nord che esclude l'Artico, ed 2è l'Artico.
    Sebbene l'Artico, l'Antartico e i Tropici abbiano ancora delle stagioni, per il bene di questa sfida diremo che l'Artico e l'Antartico sono in uno stato costante di Winter, e i Tropici sono in uno stato costante di Summer.

Qui una rappresentazione visiva di questi cinque gruppi, dove si -2trova il circolo antartico; -1tra il Tropico del Capricorno e il Cerchio Antartico; 0tra il Tropico del Capricorno e il Tropico del Cancro; 1tra il circolo polare artico e il Tropico del cancro; e -2il circolo polare artico.

inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine Fonte: COSMOS - L'Enciclopedia dell'astronomia SAO

Produzione:

Uno dei Spring, Summer, Autumn, o Winter, seguendo queste regole:

  • È la posizione in ingresso 2o -2(Artico o Antartico), sempre in uscita Winter.
  • È l'input di posizione 0(Tropici), sempre in uscita Summer.
  • È l'input di posizione 1(emisfero nord), l'output di una delle quattro stagioni in base all'input del mese: Spring( m = [3,5]); Summer( m = [6,8]); Autumn( m = [9,11]); Winter( m = 12 or m = [1,2]).
  • È l'input di posizione -1(emisfero sud), l'output di una delle quattro stagioni in base all'input del mese: Spring( m = [9,11]); Summer( m = 12 or m = [1,2]); Autumn( m = [3,5]); Winter( m = [6,8]).

Regole della sfida:

  • Uscita qualsiasi quattro valori distinti di vostra scelta che indicano Spring, Summer, Autumn, o Winter(per favore cosa hai utilizzato nella risposta).
    -15 byte bonus se l'uscita Spring, Summer, Autumn, o Wintercome testo (case-insensitive, in modo da poter essere pienamente minuscole o completamente maiuscole così, al posto del titolo utilizzato e minuscole).
  • L'input del mese può essere in qualsiasi formato ragionevole. Può essere un numero intero con 0 indici o 1 indice, Date-object, Month-String, ecc.
  • Ingresso di posizione sarà sempre uno di questi possibili cinque ingressi -2, -1, 0, 1, 2.

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
  • Le scappatoie predefinite sono vietate.
  • Se possibile, aggiungi un link con un test per il tuo codice.
  • Inoltre, si prega di aggiungere una spiegazione, se necessario.

Casi test:

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

Perché non possiamo semplicemente usare quattro valori distinti per le stagioni?
Erik the Outgolfer,

Ho letto quella regola, ecco perché l'ho chiesto. Inoltre, perché hai paura dei "calcoli di numeri magici"?
Erik the Outgolfer

Non vedo nulla di male nel vedere solo i calcoli, molto probabilmente verranno utilizzati per l'indicizzazione. È la tua sfida, ma direi che questa è una complicazione inutile. EDIT: sulla copia, beh, non è davvero evitabile.
Erik the Outgolfer

2
Non penso che siano necessari bonus, il programma funziona ancora se non converte l'output in quelle stringhe.
Erik the Outgolfer

1
Penso che i bonus in byte per compensare la dimensione in byte del testo vadano benissimo. Non è uno di quei "punti Bonus X se svolgi anche questa altra attività". La sfida è incentrata sulle stagioni, quindi ha senso incentivare la stampa delle stagioni.
Nathan Merrill

Risposte:


10

Rubino , 33 27 25 byte

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

Provalo online!

I valori di ritorno sono:

0 -> inverno

1 -> primavera

2 -> estate

3 -> autunno


6

Python 2 , 29 byte

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

Provalo online!

Una porta dell'approccio Ruby di GB , che si è rivelato essere di qualche byte più corto del mio:

32 byte

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

Provalo online!

Una funzione anonima che restituisce le stagioni come numeri da 0 a 3, in cui rappresentano Estate, Autunno, Inverno e Primavera in quell'ordine.

Per quanto riguarda la stampa dei nomi delle stagioni attuali:

63-15 = 48 byte

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

Provalo online!

C'è la stringa combinata se qualcuno lo vuole.


3

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

Utilizzando 1 mesi di base.

Modifica: operatori matematici riorganizzati e ridotti.

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

Provalo online!


1
È possibile salvare due byte con (++a+m/3)%4++a+m/3&3. Inoltre, a*aè strano esattamente quando lo aè, quindi il controllo a&1dovrebbe andare bene, no?
Lynn,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.