Chiński Zodiak Roku

9

2015 był rokiem kozła! W tym wyzwaniu dowiesz się, które zwierzę reprezentuje rok. Aby uniknąć skomplikowania tego wyzwania, nie musisz obliczać chińskiego nowego roku.

Ponieważ w Zodiaku jest tylko 12 zwierząt, Twój kod musi być jak najkrótszy.

Przykłady

Twój program musi mieć rok systemowy , pierwsza linia jest tylko w celach informacyjnych

2015
Goat

1924
Rat

1923
Pig

2008
Rat

Specyfikacja

Kolejność zodiaku jest następująca:

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

Ratzaczyna się w 2008 r., Pigjest 2007 r., Oxw 2009 r. itd. na koniec pętle powracają.

Dane wyjściowe muszą być poprawnie wielkie litery.

Downgoat
źródło
Czy zakłada się, że jest coś przed 2008 r. Rat?
Zach Gates
@ZachGates nie, to tylko przykład. Zaktualizuję
Downgoat
Czy można wykorzystać rok w strefie czasowej użytkownika?
LegionMammal978
1
Związane z.
Martin Ender
1
Jestem zdezorientowany wymogami roku systemowego. Więc nie ma danych wejściowych? Więc w 2015 roku wydrukowałby kozę, a teraz powinien wydrukować Monkey?
TanMath

Odpowiedzi:

5

Pyth, 54 bajty

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

Wypróbuj online: demonstracja

Możesz zastąpić ostatnie 3 znaki .d3dowolnym numerem roku, aby przetestować inne zwierzęta zodiaku.

Wyjaśnienie:

     ."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
źródło
6

Pyth - 65 bajtów

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

Wypróbuj online tutaj .

@                     Modular indexing
 c           )        Split string, use default of spaces
  ."ajs&^asd"         Packed string to compress space separated zodicas
 .d3                  Current year
Maltysen
źródło
Czy możesz dodać wyjaśnienie?
TanMath
@TanMath jest naprawdę prosty, ale pewny
Maltysen
Możesz zaoszczędzić co najmniej 3 bajty, zawężając przestrzeń znaków. demo Ponadto możesz opublikować kod niedrukowalny jako zrzut heksowy i dołączyć wersję do wydruku.
PurkkaKoodari
4

JavaScript ES6, 106 105 104 103 bajtów

Zapisano 1 bajt dzięki Maltysen, 1 bajt na inserttusernamehere i 1 bajt na edc65!

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

Dość oczywiste.

Conor O'Brien
źródło
Wydaje mi się, że ten sznurek mógłby użyć trochę btoa i atob. (Możesz także zmienić kodowanie bajtów, jeśli jest to dozwolone).
Mama Fun Roll
Wynik @ nɟuɐɯɹɐɐɯɹɐ btoawygląda na 1,5 lub więcej długości zakodowanego ciągu.
Conor O'Brien
Nie, użyj atob do kodowania i btoa do dekodowania.
Mama Fun Roll
5
Można zapisać 1 bajt : Usunąć 0jako separator i używać tego wyrażenia regularnego, aby podzielić ciąg: /(?=[A-Z])/. Szczęśliwego Nowego Roku. :)
inserttusernamehere
1
match(/.[a-z]+/g)zamiast podziału (wartość dodana: podział z przechwytywaniem nie jest ES6, jest tylko funkcją FireFox) (i 1 bajt krótszy)
edc65
3

CJam, 82 80 75 bajtów

To był bezpośredni port mojej odpowiedzi Drogi Mlecznej .

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

Zaoszczędzono 7 bajtów dzięki NinjaBearMonkey .

Zach Gates
źródło
Możesz użyć Sjako zmiennej dla przestrzeni.
NinjaBearMonkey
1
Jeszcze krótszy:"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat"S/et0==
NinjaBearMonkey
3

Japt , 72 65 bajtów

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

Wypróbuj online!

Nicość
źródło
Umm ... to całkiem nieźle, ale na pewno jest tam trochę niezadrukowanych. Czy możesz podać nam link?
ETHprodukcje
@Eth eh, nie zauważyłem, że nie można drukować. Przywrócę to: D
nicael
BTW, zamiast $[$Ð i -4 %12], możesz użyć g(Ð i -4 %C.
ETHprodukcje
@Eth ok, a także pozbędę się -4, zmieniając kolejność elementów.
nicael
@Eth Poczekaj, poprawka nie działa, wyświetla NaN ...
nicael
1

MATL , 85 bajtów

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

Korzysta z wersji 6.0.0 języka / kompilatora. Działa w Octave.

Przykład

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

Wyjaśnienie

Zauważ, że początkowy ciąg jest cyklicznie przesuwany o 3, aby uniknąć odejmowania.

'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
źródło
1

Droga Mleczna 1.6.1 , 101 96 bajtów

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

Zaoszczędzono 5 bajtów dzięki przypomnieniu Luisa Mendo .


Wyjaśnienie

Kod moduluje rok systemowy o 12 i podaje odpowiednie zwierzę.


Stosowanie

./mw <path-to-code>
Zach Gates
źródło
1
Może możesz tego uniknąć 2008-, zmieniając układ tak jak w mojej odpowiedzi?
Luis Mendo
Och, myślę, że już to robisz w odpowiedzi na CJam
Luis Mendo
Masz rację! Mogę użyć ciągu z mojej odpowiedzi CJam w odwrotnej kolejności. Dzięki za przypomnienie @LuisMendo
Zach Gates
1

CJam, 69 bajtów

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

Zawiera kilka niezadrukowanych elementów. Wypróbuj tutaj.

Lynn
źródło
4
Nie możesz potrwać roku jako danych wejściowych, musi on korzystać z bieżącego czasu systemowego.
Maltysen
Ach, naprawione. @Maltysen
Lynn
1

Python 3, 126 116 112 bajtów

Edytuj: Trzymam drugą odpowiedź, ponieważ jest fajna, ale jest krótsza.

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

Jeśli końcowe białe znaki są prawidłowe, to ma 126 bajtów. Jeśli nie, to 134 bajty po dodaniu .strip()na końcu kodu.

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

R 119 bajtów

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")zwraca rok jako ciąg znaków, (format(Sys.Date(),"%Y"):1)[1]jest to najkrótszy sposób, w jaki mogłem wymusić przekształcenie go w liczbę całkowitą, abyśmy mogli się %%do niego zastosować (generator sekwencji :rzeczywiście automatycznie wymusza na liczbę całkowitą). +1ponieważ indeksy R są oparte na 1, a nie na 0.

plannapus
źródło
0

PHP> = 5,6, 84 bajtów

Bardzo prosto:

<?=[Monkey,Rooster,Dog,Pig,Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat][date(Y)%12];
wstawić nazwę tutaj
źródło
0

Python 129 126 bajtów

EDYCJA : Właśnie nauczyłem się s.split ('') = s.split ()

Chociaż nie jest to najkrótsza metoda, oto alternatywa dla @ Sherlock9:

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

Wypróbuj tutaj

TanMath
źródło
Łał. Właśnie zredagowałem swoją odpowiedź i było to bardzo zbliżone do tego, do czego ją edytowałem. Spróbuję coś z timenastępnym.
Sherlock9
0

PowerShell, 92 bajty

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

Podobny duchem do innych odpowiedzi, dodanych tutaj tylko w celu katalogowania. Pobiera to ciąg znaków "Monkey ... Goat"i -splitspacje, aby utworzyć tablicę, co jest tańsze niż indywidualne określanie elementów ("Monkey","Rooster",...). Indeksujemy do tej tablicy za pomocą bieżącego yearmodu 12, który generuje wynik. Nic nadzwyczajnego.

AdmBorkBork
źródło
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]);}}

Wersja do odczytu / bez golfa

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
źródło
0

J , 78 bajtów

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

Stosowanie:

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

Wyjaśnienie:

;:      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
Leaky Nun
źródło