Zodiak Cina tahun ini

9

2015 adalah tahun kambing! Dalam tantangan ini, Anda akan mencari tahu hewan mana yang mewakili tahun tersebut. Untuk menghindari tantangan ini menjadi rumit, Anda tidak perlu menghitung tahun baru Cina.

Karena mereka hanya 12 hewan di Zodiac, kode Anda harus sesingkat mungkin.

Contohnya

Program Anda harus mendapatkan tahun sistem , baris pertama hanya untuk referensi

2015
Goat

1924
Rat

1923
Pig

2008
Rat

Spesifikasi

Urutan zodiak adalah:

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

Ratdimulai pada 2008, Pig2007, Ox2009, dll. di akhir putaran ini kembali.

Output harus dikapitalisasi dengan benar.

Downgoat
sumber
Adakah sesuatu sebelum 2008 diasumsikan Rat?
Zach Gates
@ZachGates tidak, itu hanya contoh. Saya akan memperbarui
Downgoat
Bisakah itu menggunakan tahun di zona waktu pengguna?
LegionMammal978
1
Terkait
Martin Ender
1
Saya bingung dengan persyaratan tahun sistem. Jadi tidak ada input? Jadi pada 2015, ia akan mencetak kambing, dan sekarang, ia harus mencetak Monyet?
TanMath

Jawaban:

5

Pyth, 54 byte

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

Cobalah online: Peragaan

Anda dapat mengganti 3 karakter terakhir .d3dengan nomor tahun apa saja untuk menguji hewan Zodiac lainnya.

Penjelasan:

     ."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
sumber
6

Pyth - 65 byte

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

Cobalah online di sini .

@                     Modular indexing
 c           )        Split string, use default of spaces
  ."ajs&^asd"         Packed string to compress space separated zodicas
 .d3                  Current year
Maltysen
sumber
Bisakah Anda menambahkan penjelasan?
TanMath
@TanMath sangat sederhana, tapi pasti
Maltysen
Anda dapat menyimpan setidaknya 3 byte dengan mempersempit ruang karakter. demo Juga, Anda mungkin ingin memposting kode yang tidak patut sebagai hexdump dan menyertakan versi yang bisa dicetak.
PurkkaKoodari
4

JavaScript ES6, 106 105 104 103 byte

Disimpan 1 byte berkat Maltysen, 1 byte untuk menyisipkan nama pengguna di sini, dan 1 byte ke edc65!

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

Cukup jelas.

Conor O'Brien
sumber
Saya merasa string itu bisa menggunakan beberapa btoa dan atob. (Anda juga dapat mengubah pengodean byte, jika diizinkan).
Mama Fun Roll
@ ן nɟuɐɯɹɐ ן oɯ btoas hasil terlihat menjadi 1,5x atau lebih panjang dari string hardcoded.
Conor O'Brien
Tidak, gunakan atob untuk menyandikan, dan btoa untuk memecahkan kode.
Mama Fun Roll
5
Anda dapat menyimpan 1 byte : Lepaskan 0sebagai pemisah dan menggunakan regex ini untuk membagi string: /(?=[A-Z])/. Selamat Tahun Baru. :)
masukkan nama pengguna di sini
1
match(/.[a-z]+/g)bukannya split (nilai tambah: split dengan capture bukan ES6, adalah fitur FireFox saja) (dan 1 byte lebih pendek)
edc65
3

CJam, 82 80 75 byte

Ini adalah port langsung dari jawaban Bima Sakti saya .

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

Disimpan 7 byte berkat NinjaBearMonkey .

Zach Gates
sumber
Anda dapat menggunakan Ssebagai variabel untuk ruang.
NinjaBearMonkey
1
Bahkan lebih pendek:"Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse Goat"S/et0==
NinjaBearMonkey
3

Japt , 72 65 byte

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

Cobalah online!

nicael
sumber
Umm ... ini cukup bagus, tapi pasti ada beberapa yang tidak patut di sana. Bisakah Anda memberi kami tautan?
ETHproduk
@ Eth eh, bukankah akun yang tidak patut dilucuti. Akan mengembalikannya: D
nicael
BTW, alih-alih $[$Ð i -4 %12], bisa Anda gunakan g(Ð i -4 %C.
ETHproduk
@ Oke, dan saya akan membuang -4 juga, dengan mengubah urutan elemen.
nicael
@Eth Tunggu, perbaikan Anda tampaknya tidak berfungsi, output NaN ...
nicael
1

MATL , 85 byte

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

Menggunakan rilis 6.0.0 dari bahasa / kompiler. Bekerja di oktaf.

Contoh

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

Penjelasan

Perhatikan bahwa string awal dipindahkan secara siklis oleh 3 untuk menghindari pengurangan.

'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)
Luis Mendo
sumber
1

Bima Sakti 1.6.1 , 101 96 byte

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

Disimpan 5 byte berkat pengingat oleh Luis Mendo .


Penjelasan

Kode modulos tahun sistem dengan 12 dan output hewan yang tepat.


Pemakaian

./mw <path-to-code>
Zach Gates
sumber
1
Mungkin Anda bisa menghindari 2008-dengan mengatur ulang string seperti pada jawaban saya?
Luis Mendo
Oh, saya pikir Anda sudah melakukannya dalam jawaban CJam Anda
Luis Mendo
Kamu benar! Saya dapat menggunakan string dari jawaban CJam saya secara terbalik. Terima kasih telah mengingatkan saya pada @LuisMendo
Zach Gates
1

CJam, 69 byte

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

Berisi banyak hal yang tidak patut. Coba di sini.

Lynn
sumber
4
Anda tidak dapat mengambil satu tahun sebagai input, itu harus menggunakan waktu sistem saat ini.
Maltysen
Ah, sudah diperbaiki. @Maltysen
Lynn
1

Python 3, 126 116 112 byte

Sunting: Saya menyimpan jawaban lain karena keren, tetapi ini lebih pendek.

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

Jika trailing whitespace ok, maka 126 byte. Jika tidak, ini 134 byte setelah ditambahkan .strip()ke akhir kode.

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

R, 119 byte

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")mengembalikan tahun sebagai string karakter, (format(Sys.Date(),"%Y"):1)[1]adalah cara terpendek yang dapat saya pikirkan untuk memaksa itu menjadi integer sehingga kita dapat menerapkannya %%(generator urutan :memang memaksa secara otomatis untuk integer). +1karena indeks R adalah berbasis 1 dan bukan berbasis 0.

plannapus
sumber
0

PHP> = 5.6, 84 byte

Sangat lurus ke depan:

<?=[Monkey,Rooster,Dog,Pig,Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat][date(Y)%12];
masukkan nama pengguna di sini
sumber
0

Python 129 126 byte

EDIT : Saya baru belajar s.split ('') = s.split ()

Meskipun ini bukan metode terpendek, berikut ini adalah jawaban alternatif untuk @ Sherlock9:

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

Coba di sini

TanMath
sumber
Wow. Saya baru saja mengedit jawaban saya dan itu cukup dekat dengan apa yang saya edit. Saya akan mencoba sesuatu dengan yang timeberikutnya.
Sherlock9
0

PowerShell, 92 byte

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

Mirip semangat dengan jawaban lain, ditambahkan di sini hanya untuk katalogisasi. Ini mengambil string "Monkey ... Goat"dan -splits pada ruang untuk membuat array, yang lebih murah daripada menentukan elemen secara individual ("Monkey","Rooster",...). Kami mengindeks ke dalam array itu dengan yearmod saat ini 12, yang menampilkan hasilnya. Tidak ada yang terlalu mewah.

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

Versi yang dapat dibaca / tidak diklik

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
sumber
0

J , 78 byte

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

Pemakaian:

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

Penjelasan:

;:      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
Biarawati Bocor
sumber