Zodiaco cinese dell'anno


9

Il 2015 è stato l'anno della capra! In questa sfida, capirai quale animale rappresenta l'anno. Per evitare di rendere questa sfida complessa, non sarà necessario calcolare il capodanno cinese.

Poiché sono solo 12 animali nello Zodiaco, il tuo codice dovrà essere il più breve possibile.

Esempi

Il programma deve ottenere l'anno di sistema , la prima riga è solo per riferimento

2015
Goat

1924
Rat

1923
Pig

2008
Rat

specificazione

L'ordine dello zodiaco è:

Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Goat, Monkey, Rooster, Dog, Pig

Ratinizia al 2008, Pigè il 2007, Oxal 2009, ecc. alla fine questo si ripete.

L'output deve essere correttamente in maiuscolo.


Si presume qualcosa prima del 2008 Rat?
Zach Gates

@ZachGates no, questo è solo un esempio. Aggiornerò
Downgoat

Può usare l'anno nel fuso orario dell'utente?
LegionMammal978,


1
Sono confuso dal requisito dell'anno di sistema. Quindi non c'è input? Quindi nel 2015 avrebbe stampato la capra e ora dovrebbe stampare Monkey?
TanMath,

Risposte:


5

Pyth, 54 byte

@rR3c."ayÖÚ©*ÐPk<`eüµÜxþ!¬Ì ¾½hÑðÙBwp"\c.d3

Provalo online: dimostrazione

Puoi sostituire gli ultimi 3 caratteri .d3con qualsiasi numero dell'anno per testare gli altri animali Zodiac.

Spiegazione:

     ."ayö..."        packed string, decrypts to "monkeycroostercdogcpig..."
    c         \c      split this string at "c"s
 rR3                  make the first letter of each animal uppercase
                .d3   current year
@                     take the correct animal of the list and print

6

Pyth - 65 byte

@c." y=CÅQ¯@îR
°©ÀáëªfÞ­#[õNqÀN8Ô'¼ô,n7˶~fB").d3

Provalo online qui .

@                     Modular indexing
 c           )        Split string, use default of spaces
  ."ajs&^asd"         Packed string to compress space separated zodicas
 .d3                  Current year

Puoi aggiungere una spiegazione?
TanMath,

@TanMath è davvero semplice, ma sicuro
Maltysen,

È possibile salvare almeno 3 byte restringendo lo spazio dei caratteri. demo Inoltre, potresti voler pubblicare il codice non stampabile come hexdump e includere una versione stampabile.
PurkkaKoodari,

4

JavaScript ES6, 106 105 104 103 byte

Salvato 1 byte grazie a Maltysen, 1 byte in insertusernamehere e 1 byte in edc65!

x=>"RatOxTigerRabbitDragonSnakeHorseGoatMonkeyRoosterDogPig".match(/.[a-z]+/g)[new Date().getYear()%12]

Abbastanza autoesplicativo.


Sento che quella stringa potrebbe usare un po 'di btoa e atob. (È anche possibile modificare la codifica byte, se consentito).
Mama Fun Roll

Il risultato di @ ן nɟuɐɯɹɐ ן oɯ btoasembra essere 1,5x o più la lunghezza della stringa hardcoded.
Conor O'Brien,

No, usa atob per codificare e btoa per decodificare.
Mama Fun Roll

5
È possibile salvare 1 byte : Rimuovere il 0come separatore e utilizzare questa regex per dividere la stringa: /(?=[A-Z])/. Felice anno nuovo. :)
inserireusernamehere

1
match(/.[a-z]+/g)invece di dividere (valore aggiunto: dividere con acquisizione non è ES6, è solo una funzione FireFox) (e 1 byte più corto)
edc65


3

Japt , 72 65 byte

`Mkey RooÐP Dog Pig R Ox Tig Rabb Dg Snake HÆ  Go`¸gÐ i %C

Provalo online!


Umm ... questo è abbastanza buono, ma ci sono sicuramente alcuni non stampabili. Potresti darci un link?
ETHproductions

@Eth eh, non ho tenuto conto del fatto che non stampabili sono spogliati. Lo ripristinerò: D
nicael

A proposito, invece di $[$Ð i -4 %12], puoi usare g(Ð i -4 %C.
ETHproductions

@Eth ok, e eliminerò anche -4, cambiando l'ordine degli elementi.
nicael

Aspetta, la tua correzione non sembra funzionare, produce NaN ...
nicael

1

MATL , 85 byte

'Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey'YbZ'10H$XOU12X\)

Utilizza la versione 6.0.0 del linguaggio / compilatore. Funziona in Octave.

Esempio

>> matl
 > 'Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey'YbZ'10H$XOU12X\)
 >
Monkey

Spiegazione

Si noti che la stringa iniziale viene spostata ciclicamente di 3 per evitare una sottrazione.

'Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey'
Yb                    % split at spaces
Z'                    % number representing current date and time
10H$XO                % get year as a string
U                     % convert to number
12X\                  % modulo 12, with 0 converted to 12
)                     % index (and implicitly print)

1

Via Lattea 1.6.1 , 101 96 byte

M" "\=A12n"Goat Horse Snake Dragon Rabbit Tiger Ox Rat Pig Dog Rooster Monkey"" "\;>=<&{~1-;^};!

5 byte salvati grazie a un promemoria di Luis Mendo .


Spiegazione

Il codice modula l'anno del sistema di 12 e produce l'animale corretto.


uso

./mw <path-to-code>

1
Forse puoi evitare 2008-riorganizzando la stringa come nella mia risposta?
Luis Mendo,

Oh, penso che lo faccia già nella tua risposta CJam
Luis Mendo

Hai ragione! Posso usare la stringa dalla mia risposta CJam al contrario. Grazie per avermelo ricordato @LuisMendo
Zach Gates

1

CJam, 69 byte

"SKiN<lEz=2)aFBY8H[$h-0|4=K`T2Cp%-a)o6"132b26b'`f+'`/et0==(eu\

Contiene un mucchio di non stampabili. Provalo qui.


4
Non puoi prendere un anno come input, deve usare l'ora di sistema corrente.
Maltysen,

Ah, riparato. @Maltysen
Lynn,

1

Python 3, 126 116 112 byte

Modifica: sto mantenendo l'altra risposta perché è bello, ma questo è più breve.

from time import*
"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Goat".split()[localtime().tm_year%12]

Se lo spazio bianco finale è ok, allora è 126 byte. In caso contrario, sono 134 byte dopo l'aggiunta .strip()alla fine del codice.

from datetime import*
"MRDPROTRDSHGoooiaxiarnoonoggt gbaaraks    ebgkstet    rioee ye     tn    r"[datetime.now().year%12::12]

0

R, 119 byte

scan(t="Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat",w="")[(format(Sys.Date(),"%Y"):1)[1]%%12+1]

format(Sys.Date(),"%Y")restituisce l'anno come una stringa di caratteri, (format(Sys.Date(),"%Y"):1)[1]è il modo più breve a cui potrei pensare di costringerlo a un numero intero in modo da poterlo applicare %%(il generatore di sequenza si :costringe automaticamente a un numero intero). +1perché gli indici R sono basati su 1 e non su 0.


0

PHP> = 5,6, 84 byte

Molto semplice:

<?=[Monkey,Rooster,Dog,Pig,Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat][date(Y)%12];

0

Python 129 126 byte

EDIT : ho appena imparato s.split ('') = s.split ()

Anche se questo non è il metodo più breve, ecco una risposta alternativa a quella di @ Sherlock9:

from datetime import*
print 'Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat'.split()[date.today().year%12]

Provalo qui


Wow. Ho appena modificato la mia risposta e questo era abbastanza vicino a quello in cui l'ho modificata. Proverò qualcosa con il timeprossimo.
Sherlock9

0

PowerShell, 92 byte

(-split"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat")[(date).Year%12]

Simile nello spirito ad altre risposte, aggiunto qui solo per motivi di catalogazione. Questo prende la stringa "Monkey ... Goat"e -splitla posiziona negli spazi per creare un array, che è più economico che specificare gli elementi individualmente con ("Monkey","Rooster",...). Indicizziamo in quell'array con la yearmod corrente 12, che genera il risultato. Niente di troppo elegante.


0

C # 159

using System;class P{static void Main(){Console.Write("Monkey;Rooster;Dog;Pig;Rat;Ox;Tiger;Rabbit;Dragon;Snake;Horse;Goat".Split(';')[DateTime.Now.Year%12]);}}

Versione leggibile / non modificata

using System;
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Monkey;Rooster;Dog;Pig;Rat;Ox;Tiger;Rabbit;Dragon;Snake;Horse;Goat".Split(';')[DateTime.Now.Year % 12]);
    }
}

0

J , 78 byte

(>;:'Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat'){~12|

Uso:

    (>;:'Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat'){~12| 2015
 Goat

Spiegazione:

;:      separates the string into boxed array according to the spaces
>       opens the boxed array so that it becomes a normal array
x {~ y  is choose the y-th element from x.
        the ~ reverses the argument, so x { y is choose the x-th element from y.
12|     is the residue when the year is divided by 12
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.