Zodiaque chinois de l'année


9

2015 a été l'année de la chèvre! Dans ce défi, vous découvrirez quel animal représente l'année. Pour éviter de compliquer ce défi, vous n'aurez pas besoin de calculer le nouvel an chinois.

Parce qu'ils ne sont que 12 animaux dans le zodiaque, votre code devra être aussi court que possible.

Exemples

Votre programme doit avoir l'année système , la première ligne est juste pour référence

2015
Goat

1924
Rat

1923
Pig

2008
Rat

spécification

L'ordre du zodiaque est:

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

Ratcommence en 2008, en Pig2007, Oxen 2009, etc. à la fin, cela revient en boucle.

La sortie doit être correctement mise en majuscule.


Est-ce que quelque chose avant 2008 est supposé être Rat?
Zach Gates

@ZachGates non, ce n'est qu'un exemple. Je mettrai à jour
Downgoat

Peut-il utiliser l'année dans le fuseau horaire de l'utilisateur?
LegionMammal978


1
Je suis confus par l'exigence relative à l'année système. Il n'y a donc pas d'entrée? Donc en 2015, il aurait imprimé de la chèvre, et maintenant, il devrait imprimer Monkey?
TanMath

Réponses:


5

Pyth, 54 octets

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

Essayez-le en ligne: Démonstration

Vous pouvez remplacer les 3 derniers caractères .d3par n'importe quel numéro d'année pour tester les autres animaux du zodiaque.

Explication:

     ."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 octets

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

Essayez-le en ligne ici .

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

Pouvez-vous ajouter une explication?
TanMath

@TanMath c'est vraiment simple, mais sûr
Maltysen

Vous pouvez enregistrer au moins 3 octets en réduisant l'espace des caractères. démo En outre, vous voudrez peut-être publier le code non imprimable en tant que vidage hexadécimal et inclure une version imprimable.
PurkkaKoodari

4

JavaScript ES6, 106 105 104 103 103 octets

1 octet enregistré grâce à Maltysen, 1 octet à insertusernamehere et 1 octet à edc65!

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

Assez explicite.


J'ai l'impression que cette chaîne pourrait utiliser des btoa et des atob. (Vous pouvez également modifier le codage des octets, si cela est autorisé).
Mama Fun Roll

Le résultat de @ ן nɟuɐɯɹɐ ן oɯ btoasemble être 1,5 fois ou plus la longueur de la chaîne codée en dur.
Conor O'Brien

Non, utilisez atob pour encoder et btoa pour décoder.
Mama Fun Roll

5
Vous pouvez enregistrer 1 octet : Retirez le 0comme séparateur et utiliser regex pour diviser la chaîne: /(?=[A-Z])/. Bonne année. :)
insertusernamehere

1
match(/.[a-z]+/g)au lieu de fractionner (valeur ajoutée: fractionner avec capture n'est pas ES6, est une fonction FireFox uniquement) (et 1 octet plus court)
edc65


3

Japt , 72 65 octets

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

Essayez-le en ligne!


Umm ... c'est assez bien, mais il y a certainement des non imprimables là-dedans. Pourriez-vous nous donner un lien?
ETHproductions

@Eth eh, n'a pas expliqué que les documents non imprimables étaient supprimés. Je vais le restaurer: D
nicael

BTW, au lieu de $[$Ð i -4 %12], vous pouvez utiliser g(Ð i -4 %C.
ETHproductions

@Eth ok, et je disposerai de -4 également, en changeant l'ordre des éléments.
nicael

@Eth Attendez, votre correctif ne semble pas fonctionner,
génère

1

MATL , 85 octets

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

Utilise la version 6.0.0 du langage / compilateur. Fonctionne à Octave.

Exemple

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

Explication

Notez que la chaîne initiale est cycliquement déplacée de 3 pour éviter une soustraction.

'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

Voie lactée 1.6.1 , 101 96 octets

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

5 octets enregistrés grâce à un rappel de Luis Mendo .


Explication

Le code module l'année système par 12 et génère l'animal approprié.


Usage

./mw <path-to-code>

1
Peut-être pouvez-vous éviter 2008-en réorganisant la chaîne comme dans ma réponse?
Luis Mendo

Oh, je pense que vous le faites déjà dans votre réponse CJam
Luis Mendo

Tu as raison! Je peux utiliser la chaîne de ma réponse CJam à l'envers. Merci de m'avoir rappelé @LuisMendo
Zach Gates

1

CJam, 69 octets

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

Contient un tas d'imprimables. Essayez-le ici.


4
Vous ne pouvez pas prendre un an en entrée, il doit utiliser l'heure actuelle du système.
Maltysen

Ah, fixe. @Maltysen
Lynn

1

Python 3, 126 116 112 112 octets

Edit: je garde l'autre réponse parce que c'est cool, mais c'est plus court.

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

Si l'espace de fin est correct, alors c'est 126 octets. Sinon, c'est 134 octets après l'ajout .strip()à la fin du code.

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

0

R, 119 octets

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")renvoie l'année sous forme de chaîne de caractères, (format(Sys.Date(),"%Y"):1)[1]est le moyen le plus court auquel je pourrais penser pour le contraindre en un entier afin que nous puissions l'appliquer %%(le générateur de séquence :contraint en effet automatiquement à un entier). +1parce que les indices R sont basés sur 1 et non sur 0.


0

PHP> = 5,6, 84 octets

Très simple:

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

0

Python 129126 octets

EDIT : je viens d'apprendre s.split ('') = s.split ()

Bien que ce ne soit pas la méthode la plus courte, voici une réponse alternative à celle de @ Sherlock9:

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

Essayez-le ici


Sensationnel. Je viens de modifier ma réponse et c'était assez proche de ce que je l'ai modifié. Je vais essayer quelque chose avec la timeprochaine.
Sherlock9

0

PowerShell, 92 octets

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

Similaire dans l'esprit à d'autres réponses, ajouté ici uniquement à des fins de catalogage. Cela prend la chaîne "Monkey ... Goat"et la -splitplace dans les espaces pour créer un tableau, ce qui est moins cher que de spécifier les éléments individuellement avec ("Monkey","Rooster",...). Nous indexons dans ce tableau avec le yearmod actuel 12, qui produit le résultat. Rien d'extraordinaire.


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

Version lisible / non golfée

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 octets

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

Usage:

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

Explication:

;:      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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.