今年の干支


9

2015年は山羊の年でした。この課題では、どの動物がその年を表すかを理解します。この複雑な問題を回避するために、中国の新年を計算する必要はありません。

ゾディアックでは12頭しかいないので、コードはできるだけ短くする必要があります。

プログラムはシステム年を取得する必要があります。最初の行は参照用です

2015
Goat

1924
Rat

1923
Pig

2008
Rat

仕様

干支の順序は次のとおりです。

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

Rat2008年に始まり、Pig2007年になりOx、2009年になり、最後にループします。

出力は正しく大文字にする必要があります。


2008年より前のものは想定されていますRatか?
ザックゲイツ

@ZachGatesいいえ、それは単なる例です。更新します
Downgoat

ユーザーのタイムゾーンで年を使用できますか?
LegionMammal978 2016年


1
システム年の要件に戸惑っています。入力はありませんか?2015年にはヤギが印刷されていたはずですが、今はモンキーを印刷する必要がありますか?
TanMath 2016年

回答:


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 2016年

@TanMathは本当にシンプルですが、確かです
Maltysen、

文字スペースを絞ることで3バイト以上節約できます。デモまた、印刷できないコードをhexdumpとして投稿し、印刷可能なバージョンを含めることもできます。
PurkkaKoodari 2016年

4

JavaScriptのES6、106の 105 104 103バイト

保存された1バイトのMaltysenのおかげで、insertusernamehereに1バイト、および edc65に1つのバイト!

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

かなり自明です。


その文字列はbtoaとatobを使用できるような気がします。(可能であれば、バイトエンコーディングを変更することもできます)。
ママファンロール

@ןnɟuɐɯɹɐןoɯ btoaの結果は、ハードコードされた文字列の長さの1.5倍以上に見えます。
Conor O'Brien

いいえ、エンコードにはatobを使用し、デコードにはbtoaを使用します。
Mama Fun Roll

5
1バイトを節約できます0区切り記号としてのを削除し、この正規表現を使用して文字列を分割します/(?=[A-Z])/。明けましておめでとうございます。:)
insertusernamehere

1
match(/.[a-z]+/g)スプリットの代わりに(追加値:キャプチャ付きスプリットはES6ではなく、FireFoxのみの機能です)(1バイト短い)
edc65


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 ok、要素の順序を変更して-4も破棄します。
nicael 2016年

@Eth待機、修正が機能していないようで、NaNを出力します...
nicael

1

MATL、85バイト

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

言語/コンパイラのリリース6.0.0を使用します。Octaveで動作します。

>> 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-私の答えのように文字列を再配置することで回避できますか?
Luis Mendo 2016年

ああ、私はあなたがすでにCJamの答えでそれを行うと思います
ルイスMendo

あなたが正しい!CJam回答の文字列を逆に使用できます。思い出させてくれてありがとう@LuisMendo
Zach Gates

1

CJam、69バイト

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

unprintablesの束が含まれています。ここで試してください。


4
入力として1年を使用することはできません。現在のシステム時刻を使用する必要があります。
Maltysen、2016年

ああ、直した。@Maltysen
Lynn

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]適用できるようにするために考えられる最も短い方法です%%(シーケンスジェネレーターは:実際に自動的に整数に強制変換します)。+1Rインデックスは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次は何か試してみるよ。
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",...)。結果を出力する現在の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.