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


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

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


Что-нибудь до 2008 года предполагается Rat?
Зак Гейтс

@ZachGates нет, это всего лишь пример. Я буду обновлять
Downgoat

Может ли он использовать год в часовом поясе пользователя?
LegionMammal978


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

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 это действительно просто, но точно
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

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


Хм ... это довольно хорошо, но там определенно есть некоторые непечатные. Не могли бы вы дать нам ссылку?
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]

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

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

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

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

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]

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


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


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.