Zodíaco Chinês do ano

9

2015 foi o ano da cabra! Neste desafio, você descobrirá qual animal representa o ano. Para evitar que esse desafio seja complexo, você não precisará calcular o ano novo chinês.

Por serem apenas 12 animais no Zodíaco, seu código precisará ser o mais curto possível.

Exemplos

Seu programa deve receber o ano do sistema , a primeira linha é apenas para referência

2015
Goat

1924
Rat

1923
Pig

2008
Rat

Especificação

A ordem do zodíaco é:

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

Ratcomeça em 2008, Pig2007, Ox2009, etc. No final, isso volta ao normal.

A saída deve estar corretamente maiúscula.

Downgoat
fonte
Algo antes de 2008 é assumido Rat?
Zach Gates
@ZachGates não, isso é apenas um exemplo. Vou atualizar
Downgoat 01/01
Ele pode usar o ano no fuso horário do usuário?
LegionMammal978 01/01
11
Relacionado.
Martin Ender
11
Estou confuso com o requisito de ano do sistema. Portanto, não há entrada? Então, em 2015, ele teria impresso cabra e agora deve imprimir Monkey?
TanMath

Respostas:

5

Pitão, 54 bytes

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

Experimente online: Demonstração

Você pode substituir os últimos 3 caracteres .d3por qualquer número de ano para testar os outros animais do Zodíaco.

Explicação:

     ."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
fonte
6

Pitão - 65 bytes

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

Experimente online aqui .

@                     Modular indexing
 c           )        Split string, use default of spaces
  ."ajs&^asd"         Packed string to compress space separated zodicas
 .d3                  Current year
Maltysen
fonte
Você pode adicionar uma explicação?
TanMath
@TanMath sua realmente simples, mas com certeza
Maltysen
Você pode salvar pelo menos 3 bytes restringindo o espaço de caracteres. demo Além disso, convém postar o código não imprimível como um hexdump e incluir uma versão imprimível.
precisa saber é o seguinte
4

JavaScript ES6, 106 105 104 103 bytes

Economizou 1 byte graças a Maltysen, 1 byte para insertusernamehere e 1 byte a edc65!

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

Bastante auto-explicativo.

Conor O'Brien
fonte
Eu sinto que essa string poderia usar alguns btoa e atob. (Você também pode alterar a codificação de bytes, se isso for permitido).
Mama Fun Roll
O resultado de @ nɟuɐɯɹɐ ן oɯ btoaparece ter 1,5x ou mais o comprimento da string codificada.
Conor O'Brien
Não, use atob para codificar e btoa para decodificar.
Mama Fun Roll
5
Você pode salvar 1 byte : Retire a 0como separador e usar esse regex para dividir a string: /(?=[A-Z])/. Feliz Ano Novo. :)
insertusernamehere
11
match(/.[a-z]+/g)(valor acrescentado: split com a captura não é ES6, é um FireFox única característica) em vez de divisão (e 1 byte mais curto)
edc65
3

CJam, 82 80 75 bytes

Esta é uma porta direta da minha resposta da Via Láctea .

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

Economizou 7 bytes graças ao NinjaBearMonkey .

Zach Gates
fonte
Você pode usar Scomo uma variável para espaço.
NinjaBearMonkey
11
Ainda mais curto:"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat"S/et0==
NinjaBearMonkey 01/01
3

Japt , 72 65 bytes

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

Experimente online!

nicael
fonte
Umm ... isso é muito bom, mas definitivamente existem alguns imprimíveis lá. Você poderia nos dar um link?
ETHproductions
@Eth eh, não considerou que os imprimíveis são removidos. Vou restaurá-lo: D
nicael 01/01
BTW, em vez de $[$Ð i -4 %12], você pode usar g(Ð i -4 %C.
ETHproductions
@Eth ok, e eu vou dispor de -4 também, alterando a ordem dos elementos.
Nicael
@Eth Aguarde, sua correção não parece trabalho, produz NaN ...
nicael
1

MATL , 85 bytes

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

Usa a versão 6.0.0 do idioma / compilador. Trabalhos em oitava.

Exemplo

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

Explicação

Observe que a cadeia inicial é deslocada ciclicamente por 3 para evitar uma subtração.

'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
fonte
1

Via 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 graças a um lembrete de Luis Mendo .


Explicação

O código modula o ano do sistema em 12 e gera o animal adequado.


Uso

./mw <path-to-code>
Zach Gates
fonte
11
Talvez você possa evitar 2008-reorganizando a string como na minha resposta?
Luis Mendo 01/01
Oh, eu acho que você já faz isso em sua resposta CJam
Luis Mendo
Você está certo! Eu posso usar a string da minha resposta CJam ao contrário. Obrigado por me lembrar @LuisMendo
Zach Gates,
1

CJam, 69 bytes

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

Contém vários não imprimíveis. Experimente aqui.

Lynn
fonte
4
Você não pode levar um ano como entrada, ele precisa usar a hora atual do sistema.
Maltysen
Ah, consertado. @Maltysen
Lynn
1

Python 3, 126 116 112 bytes

Edit: Estou mantendo a outra resposta, porque é legal, mas isso é mais curto.

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

Se o espaço em branco à direita estiver ok, são 126 bytes. Caso contrário, são 134 bytes após adicionar .strip()ao final do código.

from datetime import*
"MRDPROTRDSHGoooiaxiarnoonoggt gbaaraks    ebgkstet    rioee ye     tn    r"[datetime.now().year%12::12]
Sherlock9
fonte
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")retorna o ano como uma sequência de caracteres, (format(Sys.Date(),"%Y"):1)[1]é a maneira mais curta em que eu poderia coagi-lo a um número inteiro para que possamos aplicá %%-lo (o gerador de sequência de :fato obriga automaticamente a um número inteiro). +1porque os índices R são baseados em 1 e não em 0.

plannapus
fonte
0

PHP> = 5,6, 84 bytes

Muito direto:

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

Python 129 126 bytes

EDIT : Acabei de aprender s.split ('') = s.split ()

Embora este não seja o método mais curto, aqui está uma resposta alternativa à do Sherlock9:

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

Experimente aqui

TanMath
fonte
Uau. Acabei de editar minha resposta e isso foi bem parecido com o que eu editei. Vou tentar algo com o timepróximo.
Sherlock9
0

PowerShell, 92 bytes

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

De espírito semelhante a outras respostas, adicionadas aqui apenas para fins de catalogação. Isso pega a string "Monkey ... Goat"e -splita coloca em espaços para criar uma matriz, mais barata do que especificar os elementos individualmente ("Monkey","Rooster",...). Nós indexamos nessa matriz com o yearmod atual 12, que gera o resultado. Nada muito chique.

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

Versão legível / não protegida

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
fonte
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

Explicação:

;:      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
Freira Furada
fonte