Китайський Зодіак року


9

2015 рік був роком кози! У цьому виклику ви зрозумієте, яка тварина представляє рік. Щоб уникнути складання цього виклику складним, вам не потрібно буде обчислювати китайський новий рік.

Оскільки у Зодіаку їх всього 12 тварин, ваш код повинен бути якомога коротшим.

Приклади

Ваша програма повинна отримати системний рік , перший рядок - лише для довідки

2015
Goat

1924
Rat

1923
Pig

2008
Rat

Специфікація

Порядок Зодіаку:

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

Ratпочинається з 2008 року, Pigце 2007 рік, Ox2009 рік тощо. На завершення ця петля повертається навколо.

Вихід повинен бути з великої літери.


Чи є щось до 2008 року Rat?
Зак Гейтс

@ZachGates ні, це лише приклад. Я
оновлю

Чи може він використовувати рік у часовому поясі користувача?
LegionMammal978


1
Мене бентежить вимога системного року. Так що немає вводу? Отже, у 2015 році вона надрукувала б козла, а тепер вона повинна надрукувати Мавпу?
TanMath

Відповіді:


5

Pyth, 54 байти

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

Спробуйте в Інтернеті: Демонстрація

Ви можете замінити останні три знаки .d3будь-яким номером року для тестування інших тварин Зодіаку.

Пояснення:

     ."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 байт

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

Спробуйте його онлайн тут .

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

Чи можете ви додати пояснення?
TanMath

@TanMath - це справді просто, але точно
Малтісен

Ви можете зберегти щонайменше 3 байти, звузивши пробіл символів. демонстрація Також ви можете розмістити код, що не роздруковується, як шістнадцятковий і включити версію для друку.
PurkkaKoodari

4

JavaScript ES6, 106 105 104 103 байт

Збережено 1 байт завдяки Мальтісену, 1 байт для введеннякористувача і 1 байт до edc65!

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

Досить пояснюючи себе.


Я відчуваю, що цей рядок міг би використовувати btoa та atob. (Ви також можете змінити байтове кодування, якщо це дозволено).
Mama Fun Roll

Результат @ ן nɟuɐɯɹɐ ן btoaвиглядає 1,5х або більше довжини твердо кодованого рядка.
Conor O'Brien

Ні, використовуйте atob для кодування, а btoa - для декодування.
Mama Fun Roll

5
Ви можете зберегти 1 байт : Видаліть 0як роздільник і використовувати це регулярний вираз для розбиття рядка: /(?=[A-Z])/. Щасливого Нового року. :)
Вставтекористування

1
match(/.[a-z]+/g)замість спліт (додана вартість: розділити з захопленням не ES6, це лише функція FireFox) (і на 1 байт коротше)
edc65

3

CJam, 82 80 75 байт

Це був прямий портрет моєї відповіді Чумацького Шляху .

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

Збережено 7 байт завдяки NinjaBearMonkey .


Ви можете використовувати Sяк змінну для простору.
NinjaBearMonkey

1
Ще коротше:"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat"S/et0==
NinjaBearMonkey

3

Japt , 72 65 байт

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

Спробуйте в Інтернеті!


Гм ... це дуже добре, але там, безумовно, є якісь недруковані матеріали. Не могли б ви надіслати нам посилання?
ETHproductions

@Eh, так, не врахували, що недруковані знімаються.
Зробимо

BTW замість цього $[$Ð i -4 %12]можна використовувати g(Ð i -4 %C.
ETHproductions

@Eth ok, і я розпоряджаюся -4, також змінюючи порядок елементів.
nicael

@Eth Зачекайте, ваше виправлення не працює, виходить NaN ...
nicael

1

MATL , 85 байт

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

Використовує випуск 6.0.0 мови / компілятора. Працює в Октаві.

Приклад

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

Пояснення

Зауважте, що початковий рядок циклічно зміщується на 3, щоб уникнути віднімання.

'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

Чумацький Шлях 1.6.1 , 101 96 байт

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

Збережено 5 байт завдяки нагадуванню Луїса Мендо .


Пояснення

Код модулює системний рік на 12 і видає належну тварину.


Використання

./mw <path-to-code>

1
Може, уникнути 2008-, переставивши рядок, як у моїй відповіді?
Луїс Мендо

О, я думаю, ви вже це робите у своїй відповіді CJam
Луїс Мендо

Ти правий! Я можу використовувати зворотній рядок з моєї відповіді CJam. Дякую, що нагадали мені @LuisMendo
Zach Gates

1

CJam, 69 байт

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

Містить купу недрукованих матеріалів. Спробуйте тут.


4
Ви не можете взяти рік як вхід, він повинен використовувати поточний системний час.
Мальтісен

Ах, виправлено. @Maltysen
Lynn

1

Пітон 3, 126 116 112 байт

Редагувати: Я тримаю іншу відповідь, тому що це круто, але це коротше.

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

Якщо пробіл пробігу в порядку, то це 126 байт. Якщо ні, то після додавання .strip()до кінця коду це 134 байти .

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

0

R, 119 байт

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")повертає рік як символьний рядок (format(Sys.Date(),"%Y"):1)[1]- це найкоротший шлях, який я міг би придумати, щоб примусити його до цілого числа, щоб ми могли застосувати %%до нього (генератор послідовностей :дійсно автоматично примушує до цілого числа). +1оскільки індекси R базуються на 1, а не на 0.



0

Python 129 126 байт

EDIT : Я щойно дізнався s.split ('') = s.split ()

Хоча це не найкоротший метод, ось альтернативна відповідь на @ Sherlock9:

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

Спробуйте тут


Ого. Я щойно відредагував свою відповідь, і це було досить близько до того, що я редагував. Я спробую щось спробувати timeдалі.
Шерлок9

0

PowerShell, 92 байти

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

Дуже схожий на інші відповіді, додані тут лише заради каталогізації. Це займе рядок "Monkey ... Goat"і -splitз ним на пробіли, щоб створити масив, який дешевше, ніж окремо вказати елементи ("Monkey","Rooster",...). Індексуємо в цей масив поточним yearмодом 12, який видає результат. Нічого занадто вигадливого.


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

Читана / неперевершена версія

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 байт

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

Використання:

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

Пояснення:

;:      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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.