Китайский Зодиак года

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 году, Oxв 2009 году, и т. д. в конце это возвращается.

Выходные данные должны быть правильно прописными.

Downgoat
источник
Что-нибудь до 2008 года предполагается Rat?
Зак Гейтс
@ZachGates нет, это всего лишь пример. Я буду обновлять
Downgoat
Может ли он использовать год в часовом поясе пользователя?
LegionMammal978
1
Связанные с.
Мартин Эндер
1
Меня смущает требование системного года. Так нет ввода? Значит, в 2015 году на нем напечатали бы козу, а теперь на нем должна была печататься обезьяна?
TanMath

Ответы:

5

Pyth, 54 байта

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

Попробуйте онлайн: Демонстрация

Вы можете заменить последние 3 символа .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
Jakube
источник
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
Maltysen
источник
Можете ли вы добавить объяснение?
TanMath
@TanMath это действительно просто, но точно
Maltysen
Вы можете сэкономить как минимум 3 байта, сузив пространство символов. Демо Также вы можете опубликовать непечатаемый код в виде hexdump и включить версию для печати.
PurkkaKoodari
4

JavaScript ES6, 106 105 104 103 байт

Благодаря Maltysen сохранено 1 байт, 1 байт для вставки имени пользователя здесь и 1 байт для edc65!

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

Довольно понятно.

Конор О'Брайен
источник
Я чувствую, что эта строка может использовать некоторые btoa и atob. (Вы также можете изменить байтовую кодировку, если это разрешено).
Mama Fun Roll
Результат @ ן nɟuɐɯɹɐ looks o btoaв 1,5 раза больше длины строки в жестком коде .
Конор О'Брайен
Нет, используйте 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

Попробуйте онлайн!

nicael
источник
Хм ... это довольно хорошо, но там определенно есть некоторые непечатные. Не могли бы вы дать нам ссылку?
ETHproductions
@ Eh, не считал, что непечатные лишены. Собираюсь восстановить его: D
nicael
Кстати, вместо $[$Ð i -4 %12], вы можете использовать g(Ð i -4 %C.
ETHproductions
@ Хорошо, и я также избавлюсь от -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
Зак Гейтс
1

CJam, 69 байт

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

Содержит кучу непечатных. Попробуй это здесь.

Линн
источник
4
Вы не можете взять год в качестве входных данных, он должен использовать текущее системное время.
Maltysen
Ах, исправлено. @Maltysen
Линн
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 байтов. Если нет, то это 134 байта после добавления .strip()в конец кода.

from datetime import*
"MRDPROTRDSHGoooiaxiarnoonoggt gbaaraks    ebgkstet    rioee ye     tn    r"[datetime.now().year%12::12]
Sherlock9
источник
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.

plannapus
источник
0

PHP> = 5,6, 84 байта

Очень прямо вперед:

<?=[Monkey,Rooster,Dog,Pig,Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat][date(Y)%12];
insertusernamehere
источник
0

Python 129 126 байтов

РЕДАКТИРОВАТЬ : я только что изучил 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]

Попробуй здесь

TanMath
источник
Ух ты. Я только что отредактировал свой ответ, и это было довольно близко к тому, к чему я его отредактировал. Я собираюсь попробовать что-то со timeследующим.
Sherlock9
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, который выводит результат. Ничего особенного.

AdmBorkBork
источник
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]);
    }
}
Yytsi
источник
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
Дрянная Монахиня
источник