ভুলে যাওয়া রিয়েলস ডেট ক্যালকুলেটর


18

অন্তর্নির্মিত তারিখের পাঠাগারগুলি এবং বাইরেরগুলির মধ্যে ভাষার মধ্যে খেলার ক্ষেত্রকে সমতল করার প্রয়াসে, আসুন আমরা একটি কাল্পনিক ক্যালেন্ডার নিয়ে কাজ করি। ভুলে যাওয়া অঞ্চলগুলি হ'ল ডানজোনস এবং ড্রাগনগুলির জন্য একটি ( ? ) প্রচারের সেটিং setting অবশ্যই, প্রত্যেকের নিজস্ব ক্যালেন্ডার রয়েছে।

হারপ্টোসের ক্যালেন্ডার

সুবিধামতভাবে, ভুলে যাওয়া রাজ্যের এক বছরেও 365 দিন থাকে। তদুপরি, ক্যালেন্ডারেও 12 মাস রয়েছে। তবে এটি এখানে আকর্ষণীয় হয়ে ওঠে। প্রতি মাসে ঠিক 30 দিন দীর্ঘ হয়। বাকি 5 দিন হল ছুটির দিন যা মাসের মধ্যে পড়ে । এখানে মাসগুলি এবং ছুটির দিনগুলি যথাযথভাবে রয়েছে (ছুটির দিনগুলি ইন্টেন্ট করা সহ):

1   Deepwinter
        Midwinter
2   The Claw of Winter
3   The Claw of the Sunsets
4   The Claw of the Storms
        Greengrass
5   The Melting
6   The Time of Flowers
7   Summertide
        Midsummer
        [Shieldmeet]
8   Highsun
9   The Fading
        Highharvestide
10  Leaffall
11  The Rotting
        The Feast of the Moon
12  The Drawing Down

লক্ষ্য করুন যে আমি বন্ধনীতে ষষ্ঠ ছুটি sertedোকিয়েছি। এই লিপ দিন যা কেবল প্রতি চার বছর অন্তর ঘটে (হ্যাঁ, এটিই হ'ল - শতাব্দীগুলি ছাড়া কোনও অতিরিক্ত শেনানিগান নেই)।

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

বছরের বেশ কয়েকটি সংখ্যক সংখ্যা রয়েছে, তবে সর্বাধিক বিস্তৃত একটি হ'ল ডালেরেকোননিং , ডিআর দ্বারা সংক্ষিপ্ত হয়ে । (এছাড়াও প্রতি বছর একটি বা একাধিক নাম রয়েছে তবে আমরা তা নিয়ে মাথা ঘামাই না to)

একটি তারিখের উপাদানগুলি কমা এবং একটি স্থান দ্বারা পৃথক করা উচিত। সব মিলিয়ে, একটি বৈধ তারিখের মতো দেখতে পাওয়া যেতে পারে:

4, The Melting, 1491 DR

অথবা

Shieldmeet, 1464 DR

নোট করুন যে ছুটির দিনগুলির জন্য কোনও দিন নম্বর নেই। (আমি মনে করি 4th of The Meltingমাসের দিনগুলি আরও ভাল লাগবে তবে আমি এইগুলিতে সাধারণ সংখ্যাগুলি টেনে আনতে চাই না))

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

চ্যালেঞ্জ

হার্পটোসের ক্যালেন্ডারের বৈধ তারিখ, পাশাপাশি একটি পূর্ণসংখ্যার দেওয়া Dতারিখের Dদিনগুলি পরে আউটপুট দেয় । নোট করুন যে Dনেতিবাচক হতে পারে, এক্ষেত্রে আপনার তারিখের Dআগের দিনগুলি ফিরিয়ে দেওয়া উচিত ।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

আপনি ধরে নিতে পারেন যে বছরটি ইতিবাচক এবং 2000 এরও কম।

স্ট্যান্ডার্ড বিধি প্রযোজ্য।

পরীক্ষার মামলা

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

"30, Summertide, 1491 DR" 1                 => "Midsummer, 1491 DR"
"30, Summertide, 1491 DR" 2                 => "1, Highsun, 1491 DR"
"Midsummer, 1491 DR" 1                      => "1, Highsun, 1491 DR"
"30, Summertide, 1492 DR" 1                 => "Midsummer, 1492 DR"
"30, Summertide, 1492 DR" 2                 => "Shieldmeet, 1492 DR"
"30, Summertide, 1492 DR" 3                 => "1, Highsun, 1492 DR"
"Midsummer, 1492 DR" 1                      => "Shieldmeet, 1492 DR"
"Midsummer, 1492 DR" 2                      => "1, Highsun, 1492 DR"
"Shieldmeet, 1492 DR" 1                     => "1, Highsun, 1492 DR"
"1, Highsun, 1490 DR" 365                   => "1, Highsun, 1491 DR"
"1, Highsun, 1491 DR" 365                   => "Shieldmeet, 1492 DR"
"Shieldmeet, 1492 DR" 365                   => "Midsummer, 1493 DR"
"Midsummer, 1493 DR" 365                    => "Midsummer, 1494 DR"
"Shieldmeet, 1500 DR" 365                   => "Midsummer, 1501 DR"

"14, Deepwinter, 654 DR" 5069               => "The Feast of the Moon, 667 DR"
"Midwinter, 17 DR" 7897                     => "15, The Fading, 38 DR"
"3, The Claw of Winter, 1000 DR" 813        => "25, The Claw of the Storms, 1002 DR"
"Greengrass, 5 DR" 26246                    => "9, The Claw of the Sunsets, 77 DR"
"30, The Melting, 321 DR" 394               => "29, The Time of Flowers, 322 DR"
"17, The Time of Flowers, 867 DR" 13579     => "20, Highsun, 904 DR"
"Highharvestide, 1814 DR" 456               => "30, The Drawing Down, 1815 DR"
"23, The Rotting, 1814 DR" 3616             => "16, Leaffall, 1824 DR"
"1, Deepwinter, 1 DR" 730499                => "30, The Drawing Down, 2000 DR"

"Midsummer, 1491 DR" -1                     => "30, Summertide, 1491 DR"
"1, Highsun, 1491 DR" -2                    => "30, Summertide, 1491 DR"
"1, Highsun, 1491 DR" -1                    => "Midsummer, 1491 DR"
"Midsummer, 1492 DR" -1                     => "30, Summertide, 1492 DR"
"Shieldmeet, 1492 DR" -2                    => "30, Summertide, 1492 DR"
"1, Highsun, 1492 DR" -3                    => "30, Summertide, 1492 DR"
"Shieldmeet, 1492 DR" -1                    => "Midsummer, 1492 DR"
"1, Highsun, 1492 DR" -2                    => "Midsummer, 1492 DR"
"1, Highsun, 1492 DR" -1                    => "Shieldmeet, 1492 DR"
"1, Highsun, 1491 DR" -365                  => "1, Highsun, 1490 DR"
"Shieldmeet, 1492 DR" -365                  => "1, Highsun, 1491 DR"
"Midsummer, 1493 DR" -365                   => "Shieldmeet, 1492 DR"
"Midsummer, 1494 DR" -365                   => "Midsummer, 1493 DR"
"Midsummer, 1501 DR" -365                   => "Shieldmeet, 1500 DR"

"The Feast of the Moon, 667 DR" -5069       => "14, Deepwinter, 654 DR"
"15, The Fading, 38 DR" -7897               => "Midwinter, 17 DR"
"25, The Claw of the Storms, 1002 DR" -813  => "3, The Claw of Winter, 1000 DR"
"9, The Claw of the Sunsets, 77 DR" -26246  => "Greengrass, 5 DR"
"29, The Time of Flowers, 322 DR" -394      => "30, The Melting, 321 DR"
"20, Highsun, 904 DR" -13579                => "17, The Time of Flowers, 867 DR"
"30, The Drawing Down, 1815 DR" -456        => "Highharvestide, 1814 DR"
"16, Leaffall, 1824 DR" -3616               => "23, The Rotting, 1814 DR"
"30, The Drawing Down, 2000 DR" -730499     => "1, Deepwinter, 1 DR"

1
ড্রাগন ল্যান্স আরেকটি বড় ডি অ্যান্ড ডি প্রচার প্রচারণা। তাদের ক্যালেন্ডার সম্পর্কে আমি তাদের তিনটি চাঁদ ছাড়া কিছু মনে করতে পারি না, যার কক্ষপথটি কয়েকটি রেফারেন্স বইয়ে বিশদভাবে ব্যাখ্যা করা হয়েছিল।
সিজে ডেনিস

উত্তর:


5

রুবি, 543 523 521 498 511 509 বাইট

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

সম্পাদনা করুন: মার্টিন বাটনার এবং তার পরামর্শের জন্য এখানে ধন্যবাদ ।

সম্পাদনা: আমি "এক মাসে বেশিরভাগ দিন" তালিকাটি গল্ফ করেছি।

সম্পাদনা: যদিও নিচে golfing আমি ঘাঁটা d[10]=r%4<1?1:0থেকে d[10]=0**(r%4)একটি বাইট জন্য, আমি লক্ষ্য করেছি আমি একটি বাগ চালু চাই যখন নিচে golfing dদিন তালিকার নম্বর, যাতে Shieldmeet দৃর্ঘটনায় 30 দিন ছিল। এবং সুতরাং, বাইট গণনা ফিরে এসেছেন। আমি এই বাগটি ঠিক করার জন্য পাইথন উত্তরটি সম্পাদনা করব।

সম্পাদনা: আমি ভুলে গিয়েছি যে এই প্রশ্নে ফাংশনগুলির নামকরণ করার দরকার নেই।

->s,n{x=s[0..-4].split(", ");x=x[2]?x:[1,*x];t=(["Deepwinter,Midwinter","Winter","Sunsets","the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"]*',The Claw of ').split(?,);p,q,r=x[0].to_i+n,t.index(x[1]),x[2].to_i;d=[30,1,30,30]*4+[1,30];d[10]=0**(r%4);(a=p<1?1:-1;q=(q-a)%18;p+=a*d[a<0?q-1:q];r-=a*0**q;d[10]=0**(r%4))until(1..d[q])===p;z=d[q]<2?[t[q],r]:[p,t[q],r];z*", "+" DR"}

Ungolfed:

def h(s,n)
  x=s[0..-4].split(", ")
  x=x[2]?x:[1,*x]
  t=["Deepwinter,Midwinter","Winter","Sunsets","the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"]
  t=t*',The Claw of '           # turns the above array into a string with "Claw"s inserted
  t=t.split(?,)                 # then splits that string back up again by ","
  p=x[0].to_i+n
  q=t.index(x[1])
  r=x[2].to_i
  d=[30,1,30,30]*4+[1,30]
  d[10]=0**(r%4)
  until(1..d[q])===p
    a=p<1?1:-1
    q=(q-a)%18
    p+=a*d[a<0?q-1:q]
    r-=a*0**q
    d[10]=0**(r%4)
  end
  z=d[q]<2?[t[q],r]:[p,t[q],r]  # putting z=[t[q],r] on another line saved me no bytes
  z*", "+" DR"
end

5

পাইথন 3, 712 652 636 567 563 552 550 548 529 540 বাইট

শেষ অবধি, আমি এই দুর্দান্ত প্রশ্নের উত্তর লেখার জন্য সময় পেয়েছি। এটি এখনও খুব গল্ফ হয় নি (মাসের নামের তালিকা এবং দিনের তালিকার সংখ্যা এই ক্ষেত্রে বিশেষভাবে গুরুতর , এবং নেতিবাচক হ্যান্ডেল Dকরার জন্য লুপের সময় পৃথক পৃথক প্রয়োজন প্রয়োজন ) তবে কমপক্ষে এটি একটি উত্তর।

সম্পাদনা: একটি বাগ ঠিক করা

def h(s,n):
 x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[30,1,30,30]*4+[1,30];d[10]=r%4<1
 while p>d[q]or p<1:a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*0**q;d[10]=r%4<1
 return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

Ungolfed:

def harptos(date, num):
    t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
    t = t.split(",")        # split up the names of the months
    x = date[:-3]           # removes " DR"
    x = x.split(", ")
    if len(x) < 3:
        x = [1] + x         # if we have two items (holiday), append a "day of the month"
    p = int(x[0]) + num     # initialize the "date" by adding num to it
    q = t.index(x[1])
    r = int(x[2])
    d=[30,1,30,30]*4+[1,30] # all the month lengths
    d[10] = r%4 < 1         # leap year toggle
    while p > d[q]:         # while the "date" > the number of days in the current month
        p -= d[q]           # decrement by number of days in current month
        q = (q+1)%18        # increment month
        r += 0**q           # increment year if the incremented month == the first month
        d[10] = r%4 < 1     # leap year toggle
    while p < 1:            # while the "date" is negative
        q = (q-1)%18        # decrement month first
        p += d[q]           # add the number of days in the decremented month
        r -= 0**q            # decrement year if the decremented month == the first month
        d[10] = r%4 < 1     # leap year toggle
    m = [t[q],str(r)]       # start the result array
    if d[q] > 2:
        m = [str(p)] + m    # if the month is NOT a holiday, add the day
    return ", ".join(m) + " DR"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.