นักษัตรจีนประจำปี


9

ปี 2558 เป็นปีแพะ! ในการท้าทายนี้คุณจะคิดได้ว่าสัตว์ชนิดใดที่แสดงถึงปี เพื่อหลีกเลี่ยงการท้าทายนี้ให้ซับซ้อนคุณไม่จำเป็นต้องคำนวณปีใหม่จีน

เนื่องจากพวกมันเป็นสัตว์ในจักรราศีเพียง 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หรือไม่
Zach Gates

@ ZachGates ไม่นั่นเป็นเพียงตัวอย่าง ฉันจะอัปเดต
Downgoat

สามารถใช้ปีในเขตเวลาของผู้ใช้ได้หรือไม่
LegionMammal978


1
ฉันสับสนกับความต้องการของปีของระบบ ดังนั้นจึงไม่มีอินพุต? ดังนั้นในปี 2015 มันจะพิมพ์แพะและตอนนี้ควรพิมพ์ Monkey?
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 ไบต์โดย จำกัด พื้นที่อักขระให้แคบลง เดโมนอกจากนี้คุณอาจต้องการโพสต์รหัส unprintable เป็น hexdump และรวมถึงรุ่นที่พิมพ์ได้
PurkkaKoodari

4

JavaScript ES6, 106 105 104 103 ไบต์

บันทึก 1 ไบต์ขอบคุณ Maltysen, 1 ไบต์ถึงชื่อผู้ใช้งานและ 1 ไบต์ถึง edc65!

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

สวยด้วยตนเองอธิบาย


ฉันรู้สึกว่าสตริงนั้นสามารถใช้ btoa และ atob ได้ (นอกจากนี้คุณยังสามารถเปลี่ยนการเข้ารหัสไบต์ได้หากได้รับอนุญาต)
Mama Fun Roll

ผลลัพธ์ของ @ ןnɟuɐɯɹɐן o looks btoaมีความยาว 1.5x หรือมากกว่าของสตริงฮาร์ดโค้ด
Conor O'Brien

ไม่ใช้ atob เพื่อเข้ารหัสและ btoa เพื่อถอดรหัส
Mama Fun Roll

5
คุณสามารถบันทึก1 ไบต์ : เอา0เป็นตัวคั่นและใช้ regex /(?=[A-Z])/นี้จะแยกสตริง: สวัสดีปีใหม่. :)
insertusername ที่นี่

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

@Eth เอ๊ะไม่ได้คิดว่าบัญชีจะถูกปล้น จะคืนค่ามัน: D
nicael

BTW แทนคุณสามารถใช้$[$Ð 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 ไบต์ขอบคุณที่แจ้งเตือนโดยหลุยส์ Mendo


คำอธิบาย

รหัส modulos ปีของระบบโดย 12 และส่งออกสัตว์ที่เหมาะสม


การใช้

./mw <path-to-code>

1
บางทีคุณสามารถหลีกเลี่ยงได้2008-โดยจัดเรียงสตริงใหม่ตามคำตอบของฉัน
Luis Mendo

โอ้ฉันคิดว่าคุณทำอย่างนั้นแล้วในคำตอบ CJam ของคุณ
หลุยส์เมนโด

คุณถูก! ฉันสามารถใช้สตริงจากคำตอบ CJam ของฉันในสิ่งที่ตรงกันข้าม ขอบคุณที่เตือนฉัน @LuisMendo
Zach Gates

1

CJam, 69 ไบต์

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

ประกอบด้วยพวงของ unprintables ลองที่นี่


4
คุณไม่สามารถใช้เวลาเป็นปีในการป้อนข้อมูลได้จะต้องใช้เวลาของระบบปัจจุบัน
Maltysen

คงที่แล้ว @Maltysen
Lynn

1

Python 3, 126 116 112 bytes

แก้ไข:ฉันยังคงคำตอบอื่น ๆ เพราะมันเจ๋ง แต่มันสั้นกว่านี้

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

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"และ-splits ("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.