Chinesischer Tierkreis des Jahres

9

2015 war das Jahr der Ziege! In dieser Herausforderung werden Sie herausfinden, welches Tier das Jahr darstellt. Um zu vermeiden, dass diese Herausforderung zu komplex wird, müssen Sie das chinesische Neujahr nicht berechnen.

Da es sich nur um 12 Tiere im Tierkreis handelt, muss Ihr Code so kurz wie möglich sein.

Beispiele

Ihr Programm muss das Systemjahr erhalten , die erste Zeile dient nur als Referenz

2015
Goat

1924
Rat

1923
Pig

2008
Rat

Spezifikation

Die Reihenfolge des Tierkreises ist:

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

Ratbeginnt bei 2008, Pigist 2007, Oxbei 2009 usw. am Ende dreht sich dies wieder um.

Die Ausgabe muss korrekt aktiviert sein.

Downgoat
quelle
Wird irgendetwas vor 2008 angenommen Rat?
Zach Gates
@ZachGates nein, das ist nur ein Beispiel. Ich werde aktualisieren
Downgoat
Kann es das Jahr in der Zeitzone des Benutzers verwenden?
LegionMammal978
1
Verbunden.
Martin Ender
1
Ich bin durch die Systemjahresanforderung verwirrt. Es gibt also keine Eingabe? Also im Jahr 2015 hätte es Ziege gedruckt, und jetzt sollte es Monkey drucken?
TanMath

Antworten:

5

Pyth, 54 Bytes

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

Probieren Sie es online aus: Demonstration

Sie können die letzten 3 Zeichen .d3durch eine beliebige Jahreszahl ersetzen , um die anderen Zodiac-Tiere zu testen.

Erläuterung:

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

Pyth - 65 Bytes

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

Probieren Sie es hier online aus .

@                     Modular indexing
 c           )        Split string, use default of spaces
  ."ajs&^asd"         Packed string to compress space separated zodicas
 .d3                  Current year
Maltysen
quelle
Können Sie eine Erklärung hinzufügen?
TanMath
@ TanMath es ist wirklich einfach, aber sicher
Maltysen
Sie können mindestens 3 Bytes speichern, indem Sie den Zeichenraum eingrenzen. Demo Außerdem möchten Sie möglicherweise den nicht druckbaren Code als Hexdump veröffentlichen und eine druckbare Version hinzufügen.
PurkkaKoodari
4

JavaScript ES6, 106 105 104 103 Bytes

1 Byte dank Maltysen gespeichert, 1 Byte zum Einfügen des Benutzernamens und 1 Byte zum Edc65!

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

Ziemlich selbsterklärend.

Conor O'Brien
quelle
Ich habe das Gefühl, dass diese Saite etwas Btoa und Atob gebrauchen könnte. (Sie können auch die Byte-Codierung ändern, wenn dies zulässig ist.)
Mama Fun Roll
Das Ergebnis von @ ן nɟuɐɯɹɐ ן oɯ scheint 1,5x btoaoder mehr der Länge der fest codierten Zeichenfolge zu entsprechen.
Conor O'Brien
Nein, verwenden Sie atob zum Codieren und btoa zum Decodieren.
Mama Fun Roll
5
Sie können 1 Byte speichern : Entfernen Sie das 0als Trennzeichen und verwenden Sie diesen regulären Ausdruck, um die Zeichenfolge zu teilen : /(?=[A-Z])/. Frohes neues Jahr. :)
insertusernamehere
1
match(/.[a-z]+/g)anstelle von split (Mehrwert: split mit Capture ist nicht ES6, ist nur eine FireFox-Funktion) (und 1 Byte kürzer)
edc65
3

CJam, 82 80 75 Bytes

Dies war ein direkter Hafen meiner Antwort auf die Milchstraße .

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

7 Bytes dank NinjaBearMonkey gespeichert .

Zach Gates
quelle
Sie können Sals Variable für den Speicherplatz verwenden.
NinjaBearMonkey
1
Noch kürzer:"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

Probieren Sie es online aus!

nicael
quelle
Ähm ... das ist ziemlich gut, aber es gibt definitiv einige nicht druckbare Elemente. Könnten Sie uns einen Link geben?
ETHproductions
@Eth eh, habe nicht berücksichtigt, dass nicht druckbare entfernt werden.
Ich
Übrigens können Sie stattdessen $[$Ð i -4 %12]verwenden g(Ð i -4 %C.
ETHproductions
@Eth ok, und ich werde auch -4 entsorgen, indem ich die Elementreihenfolge ändere.
Nicael
@Eth Warten Sie, Ihr Fix scheint nicht zu funktionieren, gibt NaN aus ...
nicael
1

MATL , 85 Bytes

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

Verwendet Release 6.0.0 der Sprache / des Compilers. Funktioniert in der Oktave.

Beispiel

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

Erläuterung

Beachten Sie, dass die anfängliche Zeichenfolge zyklisch um 3 verschoben wird, um eine Subtraktion zu vermeiden.

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

Milchstraße 1.6.1 , 101 96 Bytes

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

5 Bytes dank einer Erinnerung von Luis Mendo gespeichert .


Erläuterung

Der Code moduliert das Systemjahr um 12 und gibt das richtige Tier aus.


Verwendungszweck

./mw <path-to-code>
Zach Gates
quelle
1
Vielleicht können Sie dies vermeiden, 2008-indem Sie die Zeichenfolge wie in meiner Antwort neu anordnen?
Luis Mendo
Oh, ich denke, Sie tun das bereits in Ihrer CJam-Antwort
Luis Mendo
Du hast recht! Ich kann die Zeichenfolge aus meiner CJam-Antwort umgekehrt verwenden. Vielen Dank für die Erinnerung an mich @LuisMendo
Zach Gates
1

CJam, 69 Bytes

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

Enthält eine Reihe von nicht druckbaren Dateien. Probieren Sie es hier aus.

Lynn
quelle
4
Sie können kein Jahr als Eingabe verwenden, es muss die aktuelle Systemzeit verwenden.
Maltysen
Ah, behoben. @ Malsensen
Lynn
1

Python 3, 126 116 112 Bytes

Bearbeiten: Ich behalte die andere Antwort, weil es cool ist, aber das ist kürzer.

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

Wenn nachfolgendes Leerzeichen in Ordnung ist, sind es 126 Bytes. Wenn nicht, sind es 134 Bytes nach dem Hinzufügen .strip()am Ende des Codes.

from datetime import*
"MRDPROTRDSHGoooiaxiarnoonoggt gbaaraks    ebgkstet    rioee ye     tn    r"[datetime.now().year%12::12]
Sherlock9
quelle
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")Gibt das Jahr als Zeichenfolge zurück. Dies (format(Sys.Date(),"%Y"):1)[1]ist der kürzeste Weg, den ich mir vorstellen kann, um es in eine Ganzzahl zu zwingen, damit wir es anwenden %%können (der :Sequenzgenerator zwingt tatsächlich automatisch zur Ganzzahl). +1weil R-Indizes 1-basiert und nicht 0-basiert sind.

Planapus
quelle
0

PHP> = 5,6, 84 Bytes

Sehr einfach:

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

Python 129 126 Bytes

EDIT : Ich habe gerade s.split ('') = s.split () gelernt

Obwohl dies nicht die kürzeste Methode ist, gibt es hier eine alternative Antwort auf die von @ Sherlock9:

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

Probieren Sie es hier aus

TanMath
quelle
Wow. Ich habe gerade meine Antwort bearbeitet und das war ziemlich nah an dem, worauf ich sie bearbeitet habe. Ich werde als timenächstes etwas ausprobieren .
Sherlock9
0

PowerShell, 92 Byte

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

Ähnlich wie bei anderen Antworten, die hier nur zur Katalogisierung hinzugefügt wurden. Dies nimmt die Zeichenfolge "Monkey ... Goat"und setzt -splitsie auf Leerzeichen, um ein Array zu erstellen, was billiger ist, als die Elemente einzeln mit anzugeben ("Monkey","Rooster",...). Wir indizieren in dieses Array mit dem aktuellen yearMod 12, der das Ergebnis ausgibt. Nichts Besonderes.

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

Lesbare / ungolfed Version

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
quelle
0

J , 78 Bytes

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

Verwendungszweck:

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

Erläuterung:

;:      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
Undichte Nonne
quelle