Yılın Çince Zodyak


9

2015 keçi yılı oldu! Bu meydan okumada, hangi hayvanın yılı temsil ettiğini anlayacaksınız. Bu meydan okumayı karmaşık hale getirmekten kaçınmak için Çin yeni yılını hesaplamanız gerekmeyecek.

Zodyak'ta sadece 12 hayvan oldukları için kodunuzun mümkün olduğunca kısa olması gerekir.

Örnekler

Programınız sistem yılını almalıdır , ilk satır sadece referans içindir

2015
Goat

1924
Rat

1923
Pig

2008
Rat

Şartname

Zodyak'ın sırası:

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

Rat2008'de başlıyor Pig, 2007'de, Ox2009'da, vs. sonunda bu geri dönüyor.

Çıktı doğru şekilde büyük harfle yazılmalıdır.


2008'den önceki herhangi bir şey var mı Rat?
Zach Gates

@ZachGates hayır, bu sadece bir örnek. Güncelleyeceğim
Downgoat

Yılı, kullanıcının saat diliminde kullanabilir mi?
LegionMammal978


1
Sistem yılı gereksiniminden kafam karıştı. Yani girdi yok mu? Yani 2015'te keçi basardı ve şimdi Monkey'i basmalı mı?
TanMath

Yanıtlar:


5

Pyth, 54 bayt

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

Çevrimiçi deneyin: Gösteri

.d3Diğer Zodyak hayvanlarını test etmek için son 3 karakteri herhangi bir yıl numarasıyla değiştirebilirsiniz.

Açıklama:

     ."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 bayt

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

Burada çevrimiçi deneyin .

@                     Modular indexing
 c           )        Split string, use default of spaces
  ."ajs&^asd"         Packed string to compress space separated zodicas
 .d3                  Current year

Bir açıklama ekleyebilir misiniz?
TanMath

@TanMath gerçekten basit ama emin
Maltysen

Karakter alanını daraltarak en az 3 bayt tasarruf edebilirsiniz. demo Ayrıca, yazdırılamayan kodu bir hexdump olarak göndermek ve yazdırılabilir bir sürüm eklemek isteyebilirsiniz.
PurkkaKoodari

4

JavaScript ES6, 106 105 104 103 bayt

Maltysen 1 bayt sayesinde, insertusernamehere 1 bayt, Kayıtlı ve edc65 1 byte!

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

Kendini açıklayıcı.


Bu dize bazı btoa ve atob kullanabilirsiniz gibi hissediyorum. (İzin verilirse bayt kodlamasını da değiştirebilirsiniz).
Mama Fun Roll

@ ן nɟuɐɯɹɐ ן oɯ btoasonucu, sabit kodlu dizginin uzunluğunun 1,5 katı veya daha fazla görünmektedir.
Conor O'Brien

Hayır, kodlamak için atob ve kod çözmek için btoa kullanın.
Mama Fun Roll

5
Sen kaydedebilirsiniz 1 byte : Kaldır 0ayırıcı olarak ve dize bölmek için bu normal ifadeler kullanabilirsiniz: /(?=[A-Z])/. Yeni Yılınız mutlu olsun. :)
insertusernameburada

1
match(/.[a-z]+/g)split yerine (katma değer: capture ile split ES6 değil, yalnızca FireFox özelliğidir) (ve 1 bayt daha kısa)
edc65


3

Japt , 72 65 bayt

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

Çevrimiçi deneyin!


Hımm ... bu oldukça iyi, ama kesinlikle orada bazı yazdırılamazlar var. Bize bir link verebilir misiniz?
ETHproductions

@ Eth, yazdırılamayanların soyulduğunu açıklamıyordu. Geri yükleyeceğim: D
nicael

BTW yerine $[$Ð i -4 %12]kullanabilirsiniz g(Ð i -4 %C.
ETHproductions

@ Eth ok, ve ben -4 de öğenin sırasını değiştirerek, bertaraf edeceğim.
nicael

@ Bekleyin, düzeltmeniz çalışmıyor gibi görünüyor, NaN çıktı ...
nicael

1

MATL , 85 bayt

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

Dilin / derleyicinin 6.0.0 sürümünü kullanır . Octave'de çalışıyor.

Misal

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

açıklama

Çıkarmayı önlemek için ilk dizginin döngüsel olarak 3 ile yer değiştirdiğini unutmayın.

'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

Samanyolu 1.6.1 , 101 96 bayt

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

Luis Mendo'nun hatırlatması sayesinde 5 bayt tasarruf etti .


açıklama

Kod, sistem yılını 12 kadar modüle eder ve uygun hayvanı çıkarır.


kullanım

./mw <path-to-code>

1
Belki de 2008-cevabı cevabımdaki gibi yeniden düzenleyerek kaçınabilirsiniz ?
Luis Mendo

Oh, sanırım bunu zaten CJam cevabında yapıyorsun
Luis Mendo

Haklısın! CJam cevabımdaki dizeyi ters olarak kullanabilirim. Hatırlattığınız için teşekkürler @LuisMendo
Zach Gates

1

CJam, 69 bayt

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

Bir sürü yazdırılamaz içerir. Burada deneyin.


4
Bir yılı girdi olarak alamazsınız, geçerli sistem saatini kullanması gerekir.
Maltysen

Ah, sabit. @Maltysen
Lynn

1

Piton 3, 126 116 112 bayt

Düzenleme: Ben diğer cevap tutmak çünkü serin, ama bu daha kısa.

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

Sondaki boşluk tamamsa, 126 bayttır. Değilse .strip(), kodun sonuna ekledikten sonra 134 bayt olur .

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

0

R, 119 bayt

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")Yılı bir karakter dizgisi olarak döndürür, (format(Sys.Date(),"%Y"):1)[1]bir tamsayıya zorlamak için düşünebileceğim en kısa yoldur, böylece ona uygulayabiliriz %%(sekans üreteci :gerçekten de tamsayıya otomatik olarak zorlar). +1çünkü R indeksleri 1 tabanlıdır, 0 tabanlıdır.


0

PHP> = 5,6, 84 bayt

Çok düz ileri:

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

0

Python 129 126 bayt

EDIT : Az önce s.split ('') = s.split () öğrendim

Bu en kısa yöntem olmasa da, @ Sherlock9'un yanıtına alternatif bir cevap:

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

Burada deneyin


Vay. Cevabımı yeni düzenledim ve bunu düzenlediğim şeye oldukça yakındı. Bir timesonraki ile bir şey deneyeceğim .
Sherlock9

0

PowerShell, 92 bayt

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

Diğer cevaplara benzer şekilde, burada sadece kataloglama amacıyla eklendi. Bu dize alır "Monkey ... Goat"ve -splittek tek elemanları belirten daha ucuz olan bir dizi oluşturmak için boşluklar üzerinde s ("Monkey","Rooster",...). yearSonucu 12çıkaran geçerli modla bu diziyi dizine ekleriz . Çok süslü bir şey yok.


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

Okunabilir / çözülmemiş versiyon

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 bayt

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

Kullanımı:

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

Açıklama:

;:      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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.