চাইনিজ রাশিচক্র সাইন গণনা করুন


10

চীনা নববর্ষ আসছে যে দেওয়া, এখানে একটি নির্দিষ্ট তারিখের জন্য চীনা রাশিচক্র, উপাদান এবং তাইজিটু গণনা করা একটি চ্যালেঞ্জ।

ইনপুটটি একটি তারিখ হওয়া উচিত:

1/31/2014

এখানে ব্যবহৃত তারিখটি মার্কিন শৈলী mm/dd/yyyy, তবে বিকল্পভাবে আইএসও -8601 শৈলী হতে পারে: yyyy-mm-ddসুতরাং তারিখের ইনপুটটির স্টাইলটি কঠোর নয়।

আউটপুটটি চীনা রাশিচক্রের তারিখের সাথে মিলে যায় এমন উপাদান এবং তার তাইজিটু অংশের সাথে পশুর চিহ্ন হতে হবে :

Horse - Wood - Yang

রাশিচক্র - উপাদান - তাইজিতুর সম্পর্ক দেখানো একটি টেবিল এখানে দেখা যায়: চাইনিজ রাশিচক্র - বছরগুলি

আউটপুট ফর্ম্যাটটি কঠোর নয় তবে এতে প্রাণী, উপাদান এবং তাইজিটু উপাদান থাকা উচিত এবং কিছু ফ্যাশনে সীমিত করা উচিত।

উপরের তারিখের জন্য বৈধ আউটপুট উদাহরণগুলির মধ্যে অন্তর্ভুক্ত থাকতে পারে:

(horse, wood, yang)
["Horse", "Wood", "Yang"]

আপনার প্রোগ্রামটির কমপক্ষে 100 বছরের ব্যাপ্তির জন্য আজকের তারিখ সহ বৈধ আউটপুটটি ফিরিয়ে দেওয়া উচিত। এর অর্থ এটির জন্য কমপক্ষে দুটি 60 বছরের ( সেক্সেজেনারি ) চক্রের জন্য অ্যাকাউন্টিং করতে হবে ।


3
কোনও রাশিচক্র শুরু করার গণনা কীভাবে করার জন্য আপনার কি কোনও সুবিধাজনক লিঙ্ক আছে?
হ্যান্ড-ই-ফুড

3
জোডাইক বছর কীভাবে গণনা করা যায় তা আপনার কোনও ধারণা নেই তবে এটি "বেশ সহজ বলে মনে হচ্ছে"। সম্ভবত আমাদের এই প্রশ্নটি আপাতত বন্ধ করা উচিত, এবং আপনি যখন এই ছোট্ট বিবরণটি লোপ পেয়েছেন তখন তা আবার খোলা উচিত?

1
আরেকটি বিষয় লক্ষণীয় যে এটি সর্বদা 21 জানুয়ারি থেকে 21 ফেব্রুয়ারির মধ্যে অন্তর্ভুক্ত।
জাস্টিন

3
আপনি যে সারণীটি সংযুক্ত করছেন সেটির কোনও কার্যকারিতা নেই যতক্ষণ না আপনি এই সীমাটির বাইরে তারিখগুলির জন্য সঠিক আউটপুট দেওয়া অপ্রয়োজনীয় কোনও সীমাবদ্ধতা যোগ করেন না।
পিটার টেলর

2
এডুয়ার্ড ফ্লোরিয়েনস্কু, যে প্রশ্নে আপনার দুটি বিষয় পরিষ্কার করা উচিত: 1) @ পিটারটেলর পয়েন্ট হিসাবে ইনপুট তারিখের সীমা এবং 2) আউটপুট ফর্ম্যাটটি আপনার উদাহরণে যেমন নির্দিষ্ট করা হয়েছে ঠিক তেমনই থাকতে হবে? প্রতিটি চরিত্র গণনা করে তাই এই উদ্দেশ্যটি তৈরি করুন। ধন্যবাদ।
ড্যারেন স্টোন

উত্তর:


4

গণিত 63

ঠিক আছে, এটি পুরানো হয়ে উঠতে পারে তবে এটি কাজ করে (তারিখের ইনপুটটি বেশিরভাগ ক্ষেত্রেই অস্পষ্ট):

z=WolframAlpha[#<>" Chinese zodiac",{{"Result",1},"Plaintext"}] &

উদাহরণ:

z@"1/31/2014"

"ঘোড়া (ইয়াং উড)"


গণিতের প্রশস্ততা আমাকে অবাক করে দেয়। আপনার আউটপুট ফর্ম্যাটটি ভুল, তবে আমি নিশ্চিত যে এটি সহজেই ঠিক হয়ে গেছে।
ড্যারেন স্টোন

1
@ ড্যারেনস্টোন এটি কিছুটা কৌতূহলজনক কারণ ম্যাথমেটিকা ​​কেবল ডাব্লু | এ বলে। আপনি কি ভাবেন যে আউটপুটটি ঠিক ওপি'র বিন্যাসে ফিট করতে পারে?
Yves Klett

দেখে মনে হচ্ছে অন্যান্য উত্তরগুলি প্রশ্নের উদাহরণের আউটপুটটির মতো হুবহু বিন্যাসিত এবং কোনও ভাষায় এটি করতে অবশ্যই অতিরিক্ত কোড লাগে। তবে এটি সত্যিই @ এডওয়ার্ডফ্লোরিসেনসু
ড্যারেন স্টোন

পছন্দ করুন এটি অবশ্যই বেশ কিছুটা ওভারহেড যুক্ত করবে। ডাব্লু এন্ড সি ...
ইয়ভেস ক্লেট

4

সি # - 357 337 339 বাইট

string Z(System.DateTime d){var c=new System.Globalization.ChineseLunisolarCalendar();var y=c.GetSexagenaryYear(d);var s=c.GetCelestialStem(y)-1;return",Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat,Monkey,Rooster,Dog,Pig".Split(',')[c.GetTerrestrialBranch(y)]+" - "+"Wood,Fire,Earth,Metal,Water".Split(',')[s/2]+" - Y"+(s%2>0?"in":"ang");}

বিন্যাসকৃত:

string Z(System.DateTime d)
{
  var c = new System.Globalization.ChineseLunisolarCalendar();
  var y = c.GetSexagenaryYear(d);
  var s = c.GetCelestialStem(y) - 1;
  return
    ",Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat,Monkey,Rooster,Dog,Pig".Split(',')[c.GetTerrestrialBranch(y)]
    + " - "
    + "Wood,Fire,Earth,Metal,Water".Split(',')[s / 2]
    + " - Y" + (s % 2 > 0 ? "in" : "ang");
}

+1 এছাড়াও, আপনি এড়িয়ে 20 টিরও বেশি অক্ষর সংরক্ষণ করতে পারেন string.Format
হ্যান্ড-ই-ফুড

হ্যাঁ, ঠিক আছে, ধন্যবাদ, আমি বিভিন্ন s% 2 == 0 ইত্যাদি গল্ফ করার চেষ্টা করেছি এবং বড়টিকে ভুলে গেছি। :-) এবং, আসলে, এটি হ'ল 20 টি অক্ষর, আইআইএনএম।
মরমেগিল

4

পাইথন 2: 360 * 387 586 594 - অক্ষর

আরও হ্রাস পেয়েছে

m,n,p=map(int,raw_input().split("/"));p-=1924;d=int("5od2nauh6qe4obvj8rf5pd2math6re3ocvi8sf5pd2l9uh6rf3nbvi7sg5pd2k9th6rf4navj7sg5oc1m9ti7qe3navj8sg5pc1math6qd3nbvj8sf4oc1ma"[p],36);p-=31*m-31+n<(d<21)*31+d;print"Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey Rooster Dog Pig".split()[p%12],"Wood Fire Earth Metal Water".split()[p%10/2],["Yang","Yin"][p%2]

উপরের কোডটি নিম্নলিখিত ব্যবধানের জন্য কাজ করে: 5 ফেব্রুয়ারী 1924 - 31 ডিসেম্বর 2043

উদাহরণ: পাইথন ইন্টারপ্রেটার কার্সারে উপরের কোডটি পেস্ট করার পরে

>>> m,n,p=map(int,raw_input().split("/"));p-=1924;d=int("5od2nauh6qe4obvj8rf5pd2math6re3ocvi8sf5pd2l9uh6rf3nbvi7sg5pd2k9th6rf4navj7sg5oc1m9ti7qe3navj8sg5pc1math6qd3nbvj8sf4oc1ma"[p],36);p-=31*m-31+n<(d<21)*31+d;print"Rat Ox Tiger Rabbit Dragon Snake Horse Goat Monkey Rooster Dog Pig".split()[p%12],"Wood Fire Earth Metal Water".split()[p%10/2],["Yang","Yin"][p%2]

এবং তারপরে টিপুন Enter, একটি তারিখ ইনপুট করুন

6/13/2018

এবং আবার টিপুন Enter, আউটপুট হবে

Dog Earth Yang


* ব্রায়ানের সাহায্যের মন্তব্যগুলি দেখতে আরও 27 বাইট কমিয়েছে ।


2
আপনি কি লক্ষ্য করেছেন যে আপনার বেস-36 number নম্বরটিতে "গণিত" রয়েছে দুবার? :)
টিমউই

1
@ টিমউই: ডি না, আমি করিনি, এবং এটি উভয়ই সুন্দর এবং মাতাল!
এডুয়ার্ড ফ্লোরিয়েন্সু

এডুয়ার্ড, আপনি d = int (বেস 36 নম্বর) অংশটি ব্যাখ্যা করতে পারবেন? অনুরূপ সমস্যার জন্য আমি আপনার উত্তরটি স্ট্যাকওভারফ্লোতে এসেছি। আমার বছরের হিসাবগুলি বছরের 1500 - 2043 এর পরিসীমাতে প্রসারিত করা দরকার any কোনও সহায়তার জন্য আগাম ধন্যবাদ।
লুইস মিগুয়েল

1
কিছু মাইক্রোপটিমাইজেশন দিয়ে আপনি আরও 23 টি অক্ষর সংরক্ষণ করতে পারেন। Reddit.com/r/Python/comments/2oqobw/…
ব্রায়ান

1
@ টিমভি 1math6এবং 2math6। এমনকি পূর্ববর্তী 5 এবং নীচের 3 টি অন্তর্নির্মিত বিভিন্ন অক্ষরের সাথে মিরর করা হয়েছে। এটি 3 স্পুকি 5 মিমি।
ম্যাজিক অক্টোপাস উরান

3

রুবি, 340

m,d,y=gets.split(?/).map(&:to_i);y+=1if 31*m+d-51>"d88jac8mlbuppp21ygmkjsnfsd4n3xsrhha4abnq9zgo6g2jupc39zav84434f75op4ftfhdcsa3xhc8nsw1ssw8p9qns1tf14mncy8j18msr9rsb7j7".to_i(36)>>5*y-9625&31
$><<[%w(Goat Monkey Rooster Dog Pig Rat Ox Tiger Rabbit Dragon Snake Horse)[y%12],%w(Metal Water Wood Fire Earth)[(y-1)/2%5],%w(Yin Yang)[y%2]]*' - '

এটি ফেব্রুয়ারি 5, 1924 এবং 29 জানুয়ারী, 2044 এর মধ্যে তারিখগুলির জন্য কাজ করবে।


এই "ম্যাজিক" নাম্বারটি কী?
টেমসডিং

1
@ টমসডিং, এটি কমপ্যাক্টনেসের জন্য বেজ 36 এ এনকোডযুক্ত একটি 600-বিট পূর্ণসংখ্যা। Bitfields ভেঙে, এটা 1924 এবং 1944 মধ্যে প্রতিটি বছরের জন্য চান্দ্র প্রথম দিনে একটি টেবিল
ড্যারেন স্টোন

3

গল্ফস্ক্রিপ্ট (212 টি অক্ষর)

এটি মুদ্রণযোগ্য অক্ষর ব্যবহার করে, সুতরাং xxd থেকে আউটপুট এখানে:

0000000: 272d 272f 6e2a 7e5c 2833 312a 2b5c 3a5e  '-'/n*~\(31*+\:^
0000010: 3139 2a22 d4e3 275a 747f 878c 70cb 996d  19*"..'Zt...p..m
0000020: a4f9 19e9 699e d818 bb61 c4e3 2232 3536  ....i....a.."256
0000030: 6261 7365 2033 6261 7365 5e31 3932 322d  base 3base^1922-
0000040: 3c7b 282d 7d2f 3330 2532 312b 3e5e 352d  <{(-}/30%21+>^5-
0000050: 2b3a 5e31 3225 2752 6174 0a4f 780a 5469  +:^12%'Rat.Ox.Ti
0000060: 6765 720a 5261 6262 6974 0a44 7261 676f  ger.Rabbit.Drago
0000070: 6e0a 536e 616b 650a 486f 7273 650a 476f  n.Snake.Horse.Go
0000080: 6174 0a4d 6f6e 6b65 790a 526f 6f73 7465  at.Monkey.Rooste
0000090: 720a 446f 670a 5069 6727 6e2f 3d6e 5e32  r.Dog.Pig'n/=n^2
00000a0: 2f35 2527 576f 6f64 0a46 6972 650a 4561  /5%'Wood.Fire.Ea
00000b0: 7274 680a 4d65 7461 6c0a 5761 7465 7227  rth.Metal.Water'
00000c0: 6e2f 3d6e 5e31 2627 5961 6e67 0a59 696e  n/=n^1&'Yang.Yin
00000d0: 276e 2f3d                                'n/=

একটি সমতুল্য প্রোগ্রাম যা স্ট্রিংটি ব্যবহার করে পালিয়ে যায় এবং তাই এটি আরও দীর্ঘ হয়:

'-'/n*~\(31*+\:^19*"\xD4\xE3'Zt\x87\x8Cp\xCB\x99m\xA4\xF9\x19\xE9i\x9E\xD8\x18\xBBa\xC4\xE3"256base 3base^1922-<{(-}/30%21+>^5-+:^12%'Rat
Ox
Tiger
Rabbit
Dragon
Snake
Horse
Goat
Monkey
Rooster
Dog
Pig'n/=n^2/5%'Wood
Fire
Earth
Metal
Water'n/=n^1&'Yang
Yin'n/=

আকর্ষণীয় অংশটি হ'ল তারিখটি দেওয়া হয়েছে, এটি কিনা গ্রেগরিয়ান বছরে পড়ছে চীনা নববর্ষের আগে বা পরে। পূর্ববর্তী প্রশ্নে আমি ইস্টার গণনা অ্যালগরিদম থেকে অনুপ্রেরণা নিয়েছি , আমি নতুন বছরের তারিখের পক্ষে যুক্তিসঙ্গত সহজ গণনার সন্ধান করেছি। শেষ পর্যন্ত আমি একটি সরল সূত্র নিয়ে চলেছি যা আমাকে বেশিরভাগ পথে পেয়ে যায়, ত্রুটি শর্তের জন্য একটি অনুসন্ধান সারণী।

সহজ গণনা হয় day_of_year = 21 + (19 * year % 30)। ত্রুটি শব্দটি (1924 থেকে 2044) সুদের পরিসীমা থেকে 0শুরু 8করে এবং বছরের পর বছর একের বেশি হয় না, সুতরাং অনুসন্ধান সারণীটি ভারসাম্য ত্রৈমূলে এনকোড করা হয় এবং ত্রুটির শর্তটিকে সংক্ষিপ্ত করে একটি এর ত্রুটির শর্তাদি সংশ্লেষ করে টেবিলের উপসর্গ


খুব সুন্দর, এখন পর্যন্ত খুব কম, গাণিতিক বাদে একজন বাহ্যিক সংস্থান ব্যবহার করছে। +1
এডুয়ার্ড ফ্লোরাইনস্কু

2

সি #, 630 611 604 572 570 বাইট, 120 বছর

(যদি আপনি অফসেটটি জানেন তবে প্রতি অতিরিক্ত বছরে ~ 2⅔ বাইট যোগ করুন)

এটি 24-জানু -2020-এর মাধ্যমে 31-জানুয়ারী -1900 জন্মগ্রহণকারীদের পক্ষে ভাল এবং সম্ভবত এই ব্যাপ্তির বাইরে ক্রাশ হবে। বর্ধিত বছরের সংখ্যা জন্য বোনাস পয়েন্ট আছে?

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

সম্পাদনাগুলি:

  • সমস্ত স্ট্রিংকে একটি অ্যারেতে রেখে আউটপুট সিলেক্টারে অফসেট যুক্ত করুন।
  • দিনটি অফসেটে ২৮-জানুয়ারীতে পরিবর্তন করা হয়েছে।
  • string.Split()এডুয়ার্ড ফ্লোরিয়েন্স্কুর উত্তর থেকে অনুপ্রেরণা নেওয়া ।
  • সমস্ত অ্যারে ইনলাইনড। এটি কেবল আমাকে 2 টি অক্ষর সংরক্ষণ করেছে। : - /

পরিবর্তন করে 5 অক্ষরের সংরক্ষণ " - "+new[]{"Yang","Yin"}[x%2]করার " - Y"+(x%2<1?"ang":"in"):)
Timwi

-1

বেশ সোজা এগিয়ে পিএইচপি সুইচ স্টেটমেন্ট ব্যবহার

  • গণনা যতদূর আপনি চান ...

    <?php
    
    // input the year
    $Y = 2020;
    
    // calculate the Z sign
    switch (($Y - 4) % 12) {
      case  0: $z = 'Rat';break;
      case  1: $z = 'Ox';break;
      case  2: $z = 'Tiger';break;
      case  3: $z = 'Rabbit';break;
      case  4: $z = 'Dragon';break;
      case  5: $z = 'Snake';break;
      case  6: $z = 'Horse';break;
      case  7: $z = 'Goat';break;
      case  8: $z = 'Monkey';break;
      case  9: $z = 'Rooster'; break;
      case 10: $z = 'Dog';break;
      case 11: $z = 'Pig';break;
    }
    
    // calculate the e
    switch (($Y / 2) % 5) {
      case  0: $e = 'Metal';break;
      case  1: $e = 'Water';break;
      case  2: $e = 'Wood'; break;
      case  3: $e = 'Fire'; break;
      case  4: $e = 'Earth'; break;
    }
    
    // calculate the polarity
     switch ($Y % 2) {
        case  0: $p = 'Yang';break;
        case  1: $p = 'Yin';break;
    
    }
    
     echo '$Y is $z - $e - $p.';
    

1
পিপিসিজিতে আপনাকে স্বাগতম! আমাদের গুরুতর প্রতিযোগী হওয়ার জন্য সমস্ত উত্তর প্রয়োজন , সুতরাং কোড-গল্ফের ক্ষেত্রে, কোডটি সংক্ষিপ্ত করার ক্ষেত্রে আমাদের উত্তরগুলির প্রয়োজন। উদাহরণস্বরূপ, একক বর্ণের পরিবর্তনশীল নাম, অতিরিক্ত শ্বেত স্থান ইত্যাদি অপসারণ
অজ্ঞতার

1
পিপিসিগিতে আপনাকে স্বাগতম, আপনার কোডটি বছরের পর বছর সম্পূর্ণ কাজ করে না তারিখগুলি
এডুয়ার্ড ফ্লোরাইনস্কু

ঐটা সত্য. এটি আমার মনে হয় তার চেয়ে শক্ত ...
ম্যাকবয়েট

স্পেসগুলি সরিয়ে ফেলেছে এবং ইতিমধ্যে ভার সংক্ষিপ্ত করবে। তথ্যের জন্য ধন্যবাদ
ম্যাকবয়েট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.