सी #, 630 611 604 572 570 बाइट्स, 120 साल
(यदि आप ऑफसेट जानते हैं तो प्रति वर्ष ~ 2 the बाइट जोड़ें)
यह २४-जन -२०२० के माध्यम से ३१-जन -१ ९९ को जन्म लेने वाले लोगों के लिए अच्छा है और संभवतः इस सीमा के बाहर दुर्घटनाग्रस्त हो जाएगा। क्या कवर किए गए वर्षों की संख्या के लिए बोनस अंक हैं?
string Z(DateTime date)
{
int[] days = new int[] { 3, 22, 11, 1, 19, 7, -3, 16, 5, -6, 13, 2,
21, 9, -2, 17, 6, -5, 14, 4, 23, 11, 0, 19,
8, -3, 16, 5, -5, 13, 2, 20, 9, -2, 17, 7,
-4, 14, 3, 22, 11, -1, 18, 8, -3, 16, 5, -6,
13, 1, 20, 9, -1, 17, 6, -4, 15, 3, 21, 11,
0, 18, 8, -3, 16, 5, -7, 12, 2, 20, 9, -1,
18, 6, -5, 14, 3, 21, 10, 0, 19, 8, -3, 16,
5, 23, 12, 1, 20, 9, -1, 18, 7, -5, 13, 3,
22, 10, 0, 19, 8, -4, 15, 4, -6, 12, 1, 21,
10, -2, 17, 6, -5, 13, 3, 22, 11, 0, 19, 8 };
string[] signs = "Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat,Monkey,Rooster,Dog,Pig".Split(',');
string[] elements = "Metal,Water,Wood,Fire,Earth".Split(',');
string[] polarities = new string[] { "Yang", "Yin" };
int year = date.Year - 1900;
int x = year - (date.DayOfYear < days[year] + 28 ? 1 : 0);
return signs[x % 12] + " - " + elements[x / 2 % 5] + " - " + polarities[x % 2];
}
या संघनित (जोड़ा लाइन टूटने के साथ):
string Z(DateTime d){
int y=d.Year-1900,
x=y-(d.DayOfYear<new[]{3,22,11,1,19,7,-3,16,5,-6,13,2,21,9,-2,17,6,-5,14,4,23,11,0,19,8,-3,16,5,-5,13,2,20,9,-2,17,7,-4,14,3,22,11,-1,18,8,-3,16,5,-6,13,1,20,9,-1,17,6,-4,15,3,21,11,0,18,8,-3,16,5,-7,12,2,20,9,-1,18,6,-5,14,3,21,10,0,19,8,-3,16,5,23,12,1,20,9,-1,18,7,-5,13,3,22,10,0,19,8,-4,15,4,-6,12,1,21,10,-2,17,6,-5,13,3,22,11,0,19,8}[y]+28?1:0);
return "Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat,Monkey,Rooster,Dog,Pig".Split(',')[x%12]+" - "+"Metal,Water,Wood,Fire,Earth".Split(',')[x/2%5]+" - "+new[]{"Yang","Yin"}[x%2];
}
चालों में से एक ऑफसेट-टेबल की उत्पत्ति 28-जनवरी को होनी थी। यह सबसे कम वर्ण संख्या साबित हुई।
यदि संयोग से यह जोर दिया जाता है कि इनपुट एक स्ट्रिंग है, तो विधि हस्ताक्षर को बदलने के लिए 22 वर्ण जोड़ें:
string Z(string i){
और लाइन जोड़ें:
var d=DateTime.Parse(i);
संपादन:
- सभी स्ट्रिंग को एक सरणी में रखें और आउटपुट चयनकर्ताओं को ऑफ़सेट जोड़े।
- 28-जनवरी को दिन की भरपाई हुई।
string.Split()
एडुआर्ड फ्लोरिंसक्यू के जवाब से प्रेरणा ली गई ।
- सभी सरणियों को रेखांकित किया। इसने केवल मुझे 2 वर्णों को बचाया। : - /