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.


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

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

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.


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

Japt , 72 65 bajtów

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

Wypróbuj online!


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)

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>

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.


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]

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.


0

PHP> = 5,6, 84 bajtów

Bardzo prosto:

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

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


Ł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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.