年度中国十二生肖


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年开始,到Pig2007年开始,Ox到2009年,依此类推。

输出必须正确大写。


假设2008年之前会发生Rat什么?
扎克·盖茨

@ZachGates不,那只是一个例子。我将更新
Downgoat

它可以使用用户所在时区中的年份吗?
LegionMammal978 '16


1
我对系统年份要求感到困惑。所以没有输入吗?因此,在2015年,它应该印刷山羊,而现在,它应该印刷猴子?
TanMath

Answers:


5

Pyth,54个字节

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

在线尝试:演示

您可以.d3用任何年份数字替换最后3个字符,以测试其他生肖动物。

说明:

     ."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 '16

@TanMath非常简单,但可以肯定
Maltysen '16

缩小字符空间可以节省至少3个字节。演示另外,您可能希望将不可打印的代码作为十六进制转储发布,并包含可打印的版本。
PurkkaKoodari '16

4

的JavaScript ES6,106个 105 104 103字节

节省了1个字节感谢Maltysen,1个字节insertusernamehere,以及 1个字节来edc65!

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

很自我解释。


我觉得该字符串可以使用一些btoa和atob。(如果允许,您也可以更改字节编码)。
Mama Fun Roll

@ןnɟuɐɯɹɐןoɯ btoa的结果看起来是硬编码字符串长度的1.5倍或更多。
科纳·奥布莱恩

不,请使用atob进行编码,并使用btoa进行解码。
Mama Fun Roll

5
您可以保存1个字节:删除0as分隔符,然后使用此正则表达式拆分字符串:/(?=[A-Z])/。新年快乐。:)
insertusername此处,2016年

1
match(/.[a-z]+/g)而不是拆分(附加值:带捕获的拆分不是ES6,仅是FireFox功能)(且缩短了1个字节)
edc65'1


3

Japt72 65字节

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

在线尝试!


嗯...这很好,但是里面肯定有一些不可打印的东西。您能给我们一个链接吗?
ETHproductions 2016年

@Eth嗯,没有说明无法打印的内容已被删除。要恢复它:D
nicael

顺便说一句,$[$Ð i -4 %12]您可以使用代替g(Ð i -4 %C
ETHproductions 2016年

@Eth好的,我还将通过更改元素顺序来处理-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.1101个 96字节

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

由于Luis Mendo的提醒,节省了5个字节。


说明

该代码将系统的年数乘以12并输出适当的动物。


用法

./mw <path-to-code>

1
也许可以2008-像我的回答中那样重新排列字符串来避免?
路易斯·门多

哦,我想您已经在CJam答案中做到了
Luis

你是对的!我可以反向使用CJam答案中的字符串。感谢您提醒我@LuisMendo
Zach Gates

1

CJam,69个字节

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

包含一堆无法打印的内容。在这里尝试。


4
您不能以一年作为输入,它必须使用当前系统时间。
Maltysen '16

嗯,固定。@Maltysen
林恩

1

Python 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

PHP> = 5.6,84字节

非常简单:

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

0

Python 129126字节

编辑:我刚刚学习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接下来,我将尝试一些操作。
Sherlock16年

0

PowerShell,92个字节

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

精神上与其他答案类似,此处仅出于分类目的而添加。这会使用字符串"Monkey ... Goat"并将-split其放在空格中以创建一个数组,这比用单独指定元素要便宜("Monkey","Rooster",...)。我们使用当前的yearmod 索引到该数组,该数组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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.