Zodiaco chino del año

9

¡2015 fue el año de la cabra! En este desafío, descubrirás qué animal representa el año. Para evitar que este desafío sea complejo, no necesitará calcular el año nuevo chino.

Debido a que solo son 12 animales en el Zodiaco, su código deberá ser lo más corto posible.

Ejemplos

Su programa debe obtener el año del sistema , la primera línea es solo para referencia

2015
Goat

1924
Rat

1923
Pig

2008
Rat

Especificación

El orden del zodiaco es:

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

Ratcomienza en 2008, Piges 2007, Oxen 2009, etc. al final, este ciclo vuelve a funcionar.

La salida debe estar correctamente en mayúscula.

Downgoat
fuente
¿Se supone algo antes de 2008 Rat?
Zach Gates
@ZachGates no, eso es solo un ejemplo. Actualizaré
Downgoat
¿Puede usar el año en la zona horaria del usuario?
LegionMammal978
1
Relacionado.
Martin Ender
1
Estoy confundido por el requisito del año del sistema. ¿Entonces no hay entrada? Entonces, en 2015, habría impreso cabra, y ahora, ¿debería imprimir Monkey?
TanMath

Respuestas:

5

Pyth, 54 bytes

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

Pruébelo en línea: demostración

Puede reemplazar los últimos 3 caracteres .d3con cualquier número de año para probar los otros animales del zodiaco.

Explicación:

     ."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
Jakube
fuente
6

Pyth - 65 bytes

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

Pruébelo en línea aquí .

@                     Modular indexing
 c           )        Split string, use default of spaces
  ."ajs&^asd"         Packed string to compress space separated zodicas
 .d3                  Current year
Maltysen
fuente
¿Puedes agregar una explicación?
TanMath
@TanMath es realmente simple, pero seguro
Maltysen
Puede guardar al menos 3 bytes al reducir el espacio de caracteres. demo Además, es posible que desee publicar el código no imprimible como un hexdump e incluir una versión imprimible.
PurkkaKoodari
4

JavaScript ES6, 106 105 104 103 bytes

¡Se guardó 1 byte gracias a Maltysen, 1 byte para insertar el nombre de usuario aquí y 1 byte para edc65!

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

Bastante autoexplicativo.

Conor O'Brien
fuente
Siento que esa cadena podría usar algo de btoa y atob. (También puede cambiar la codificación de bytes, si está permitido).
Mama Fun Roll
El resultado de @ ן nɟuɐɯɹɐ ן oɯ btoaparece ser 1.5x o más de la longitud de la cadena codificada.
Conor O'Brien
No, use atob para codificar y btoa para decodificar.
Mama Fun Roll
55
Puede guardar 1 byte : Retire el 0como separador y el uso de esta expresión regular para dividir la cadena: /(?=[A-Z])/. Feliz año nuevo. :)
insertusernamehere
1
match(/.[a-z]+/g)en lugar de dividir (valor agregado: dividir con captura no es ES6, es una característica exclusiva de FireFox) (y 1 byte más corto)
edc65
3

CJam, 82 80 75 bytes

Este fue un puerto directo de mi respuesta de la Vía Láctea .

"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat"S/et0==

Guardado 7 bytes gracias a NinjaBearMonkey .

Puertas de Zach
fuente
Se puede usar Scomo variable para el espacio.
NinjaBearMonkey
1
Aún más corto:"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat"S/et0==
NinjaBearMonkey
3

Japt , 72 65 bytes

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

Pruébalo en línea!

nicael
fuente
Umm ... esto es bastante bueno, pero definitivamente hay algunos no imprimibles allí. ¿Podrías darnos un enlace?
ETHproductions
@Eth eh, no se dio cuenta de que las no imprimibles se eliminan. Voy a restaurarlo: D
nicael
Por cierto, en lugar de $[$Ð i -4 %12], puedes usar g(Ð i -4 %C.
ETHproductions
@Eth ok, y también eliminaré -4 cambiando el orden del elemento.
nicael
@Eth espera, su solución no parece que funciona, imprime NaN ...
nicael
1

MATL , 85 bytes

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

Utiliza la versión 6.0.0 del lenguaje / compilador. Trabajos en octava.

Ejemplo

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

Explicación

Tenga en cuenta que la cadena inicial se desplaza cíclicamente por 3 para evitar una resta.

'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)
Luis Mendo
fuente
1

Vía Láctea 1.6.1 , 101 96 bytes

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

Guardado 5 bytes gracias a un recordatorio de Luis Mendo .


Explicación

El código modula el sistema por 12 años y genera el animal adecuado.


Uso

./mw <path-to-code>
Puertas de Zach
fuente
1
¿Tal vez puedas evitar 2008-reorganizando la cadena como en mi respuesta?
Luis Mendo
Oh, creo que ya haces eso en tu respuesta de CJam
Luis Mendo
¡Tienes razón! Puedo usar la cadena de mi respuesta CJam a la inversa. Gracias por recordarme @LuisMendo
Zach Gates
1

CJam, 69 bytes

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

Contiene un montón de no imprimibles. Pruébalo aquí

Lynn
fuente
44
No puede tomar un año como entrada, tiene que usar la hora actual del sistema.
Maltysen
Ah, arreglado. @Maltysen
Lynn
1

Python 3, 126 116 112 bytes

Editar: mantengo la otra respuesta porque es genial, pero esto es más corto.

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

Si el espacio en blanco final está bien, entonces son 126 bytes. Si no, son 134 bytes después de agregar .strip()al final del código.

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

R, 119 bytes

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")devuelve el año como una cadena de caracteres, (format(Sys.Date(),"%Y"):1)[1]es la forma más corta en la que podría pensar para convertirlo en un entero para que podamos aplicarlo %%(el generador de secuencias de :hecho coacciona automáticamente al entero). +1porque los índices R se basan en 1 y no en 0.

plannapus
fuente
0

PHP> = 5.6, 84 bytes

Muy sencillo:

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

Python 129126 bytes

EDITAR : acabo de aprender s.split ('') = s.split ()

Aunque este no es el método más corto, aquí hay una respuesta alternativa a la de @ Sherlock9:

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

Pruébalo aquí

TanMath
fuente
Guau. Acabo de editar mi respuesta y eso estaba bastante cerca de lo que lo edité. Voy a intentar algo con el timesiguiente.
Sherlock9
0

PowerShell, 92 bytes

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

Similar en espíritu a otras respuestas, agregadas aquí solo por el bien de la catalogación. Esto toma la cadena "Monkey ... Goat"y la -splitcoloca en espacios para crear una matriz, que es más barata que especificar los elementos individualmente ("Monkey","Rooster",...). Nos indexamos en esa matriz con el yearmod actual 12, que genera el resultado. Nada muy elegante.

AdmBorkBork
fuente
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]);}}

Versión legible / sin golf

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]);
    }
}
Yytsi
fuente
0

J , 78 bytes

(>;:'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

Explicación:

;:      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
Monja permeable
fuente