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.