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.