128 বছর? হাইপথেটিকাল লিপ ইয়ার সংস্কার


23

সৌর বছর 365 দিন, 5 ঘন্টা, 48 মিনিট, 45 সেকেন্ড, এবং 138 মিলিসেকেন্ড, এর অনুযায়ী এই ভিডিওটি । বর্তমান গ্রেগরিয়ান ক্যালেন্ডারের সাথে, লিপ বছরের জন্য নিয়মগুলি নিম্নরূপ:

if      year is divisible by 400, LEAP YEAR
else if year is divisible by 100, COMMON YEAR
else if year is divisible by 4,   LEAP YEAR
else,                             COMMON YEAR

দুর্ভাগ্যক্রমে, এই পদ্ধতিটি প্রতি 3216 বছর পর একদিন বন্ধ থাকে।

ক্যালেন্ডার সংস্কারের একটি সম্ভাব্য পদ্ধতি হ'ল নিম্নলিখিত বিধি:

if      year is divisible by 128, COMMON YEAR
else if year is divisible by 4,   LEAP YEAR
else,                             COMMON YEAR

এটি আমাদের আরও 625,000 বছরের জন্য আমাদের ক্যালেন্ডারগুলি আবার পরিবর্তন করার প্রয়োজন নেই, দেওয়ার বা গ্রহণ করার সুবিধা রয়েছে।

বলুন পুরো বিশ্ব সিদ্ধান্ত নেয় যে, এখন থেকে, আমরা প্রতি চতুর্থ বর্ষের এই ব্যবস্থাটি প্রতি 128 তম বছর বাদে একটি লিপ বছর হিসাবে ব্যবহার করি, আমাদের ক্যালেন্ডারগুলি নিম্নরূপে পরিবর্তন করে:

YEAR    GREGORIAN    128-YEAR
2044    LEAP         LEAP
2048    LEAP         COMMON
2052    LEAP         LEAP
 ...
2096    LEAP         LEAP
2100    COMMON       LEAP
2104    LEAP         LEAP
 ...
2296    LEAP         LEAP
2300    COMMON       LEAP
2304    LEAP         COMMON
2308    LEAP         LEAP

এটি কীভাবে আমাদের সপ্তাহের অ্যালগরিদমগুলিকে প্রভাবিত করবে?

চ্যালেঞ্জ

  • 2000 সাল থেকে 100000 সাল পর্যন্ত একটি তারিখ দেওয়া হয়েছে, এই নতুন ক্যালেন্ডারের অধীনে সপ্তাহের দিনটি সন্ধান করুন।
  • কোনও ইনপুট এবং আউটপুট ফর্ম্যাট যতক্ষণ না আপনি স্পষ্টভাবে নির্দিষ্ট করতে পারবেন যে আপনি কোন ফর্ম্যাটগুলি ব্যবহার করছেন।
  • এটি কোড গল্ফ তাই আপনার সমাধান যতটা সম্ভব গোল্ফ করার চেষ্টা করুন!

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

"28 February 2048" -> "Friday"
"March 1, 2048"    -> "Sat"
(2100, 2, 29)      -> 0           # 0-indexed with Sunday as 0
"2100-02-29"       -> 7           # 1-indexed with Sunday as 7
"28 Feb. 2176"     -> "Wednesday"
"1-Mar-2176"       -> "Th"
"28/02/100000"     -> "F"         # DD/MM/YYYYYY
"Feb. 29, 100000"  -> 6           # 1-indexed with Sunday as 7
"03/01/100000"     -> 1          # MM/DD/YYYYYY and 1-indexed with Sunday as 1

চ্যালেঞ্জ সম্পর্কে পরামর্শ এবং প্রতিক্রিয়া স্বাগত। শুভকামনা এবং ভাল গল্ফিং!


পরীক্ষার ক্ষেত্রে # 4, আপনার মানে 1-ইনডেক্সড, তাই না? অন্যথায় এই সপ্তাহে 8 দিন থাকতে হবে।
সেবাস্তিয়ান

এছাড়াও, আপনি "ভাল গল্ফিং" বলছেন, সুতরাং এটি কি # কোড-গল্ফ চ্যালেঞ্জ? যদি তা হয় তবে বিজয়ী মানদণ্ডে প্রবেশ করুন (যেমন সর্বনিম্ন বাইট / অক্ষরের সংখ্যা) এবং এটি ট্যাগ হিসাবে যুক্ত করুন।
সেবাস্তিয়ান

@ সেবাস্তিয়ান আপনি উভয় ক্ষেত্রেই সঠিক। আমি ইতিমধ্যে চ্যালেঞ্জ সম্পাদনা করেছি। আপনার মতামতের জন্য আপনাকে ধন্যবাদ
শেরলক 9

1
শিরোনামটি পড়ার সময় আমি ম্যাট পার্কারের ভিডিওর যদিও নিরবচ্ছিন্নভাবে। এটি থ্রেডের সাথেও যুক্ত দেখে ভাল
লাগল

1
সপ্তাহের কেবলমাত্র আদর্শ লাইব্রেরি গ্রহণ করুন এবং সেই অনুযায়ী গ্লোবাল কনস্ট্যান্টগুলি সংশোধন করুন, তাই না? ;)
ওয়াইল্ডকার্ড

উত্তর:


8

সি (জিসিসি) , 60 বাইট

f(m,d,y){y-=m<3;return(y+y/4-y/128+"-bed=pen+mad."[m]+d)%7;}

এটি অনলাইন চেষ্টা করুন!

সাকামোটোর পদ্ধতির সহজ পরিবর্তন । ক্রমে পূর্ণসংখ্যক আর্গুমেন্ট হিসাবে ইনপুট নেয় month, day, yearএবং দিনের সংখ্যা আউটপুট করে (রবিবার 0-সূচিযুক্ত)।


"-bed=pen+mad."অংশটি কী করে ?
ericw31415

@ এরিকউ ৩১৪১৫ দিনগুলিতে এটি প্রতিটি মাসের দৈর্ঘ্যের জন্য অ্যাকাউন্ট করে এবং কেবল উপস্থিতির জন্য এটি অর্ডিনালে অক্ষর না হয়ে 7 এর গুণক দ্বারা স্থানান্তরিত হয় (৩১, ২৮ ...)।
notjagan

ঠিক আছে, আমি ভুলে গিয়েছি যে charএখনও একটি সংখ্যা প্রতিনিধিত্ব করে, তাই আপনি mod 7সরাসরি করতে পারেন can
ericw31415

6

ওল্ফ্রাম ভাষা (গণিত) , 57 55 53 বাইট

DayName@{m=#~Mod~128;6+Mod[(9#-m)/8-6Clip@m,28],##2}&

এটি অনলাইন চেষ্টা করুন!

তিনটি ইনপুট লাগে: বছর, মাস এবং দিনটি সেই ক্রমে। উদাহরণস্বরূপ, যদি আপনি উপরের ফাংশনটিকে সে হিসাবে সংরক্ষণ করেন fun, তবে fun[2048,2,28]আপনাকে ফেব্রুয়ারী 28, 2048 এর সপ্তাহের দিনটি বলে।

কিভাবে এটা কাজ করে

সূত্রটি m=#~Mod~128;6+Mod[(9#-m)/8-6Clip@m,28]বছরটিকে AD খ্রিস্টাব্দ থেকে ৩৩ খ্রিস্টাব্দের মধ্যে সমতুল্য বছরে (সপ্তাহের ঠিক একই দিনগুলির সাথে এক বছর) রূপান্তর করে। এটি করার জন্য, আমরা একটি অফসেট বিয়োগ করি এবং তারপরে বছরের 28 শে মডেল গ্রহণ করি; তবে অফসেট প্রতি 128 বছর পরিবর্তিত হয় এবং 128 দ্বারা বিভাজ্য বছরগুলিতে আমাদের আরও একটি সামঞ্জস্য করতে হবে কারণ সমমানের বছরটি একটি লিপ বছর না হওয়া উচিত be

যাইহোক, একবার এটি হয়ে গেলে, আমরা বিল্ট-ইনটি ব্যবহার করে সেই সমতুল্য বছরে মাস এবং দিন সন্ধান করি DayName



3

জাভাস্ক্রিপ্ট, 65 59 বাইট

(d,m,y)=>(y-=m<3,(+"0032503514624"[m]+y+(y>>2)-(y>>7)+d)%7)

(d,m,y)=>(y-=m<3,(+"0032503514624"[m]+~~y+~~(y/4)-~~(y/128)+d)%7)

সাকামোটোর পদ্ধতি ব্যবহার করে। দেয়0=Sunday, 1=Monday, 2=Tuesday...

মিশা লাভরভকে -2 বাইট ধন্যবাদ
-4 বাইট ধন্যবাদ আর্নল্ডকে ধন্যবাদ


1
আমার মনে হয় ~~yকেবল পরিবর্তন করা যায় y। আপনি ইনপুটটিতে ভগ্নাংশের বছর পাচ্ছেন না, তাই না? তবে আমি স্বীকার করি আমি জাভাস্ক্রিপ্টে সাবলীল নই।
মিশা লাভরভ

2
কীভাবে +y+(y>>2)-(y>>7)?
আর্নল্ড

@ মিশা লাভরভ হ্যাঁ, এটি সত্য। কিছু কারণে আমি স্থির করেছিলাম যে আমার সবকিছু মেঝে করা উচিত।
ericw31415

2

আসলে , 37 বাইট

এই একটি পোর্ট notjagan এর পরিমার্জন এর Sakamoto এর এলগরিদম , কিন্তু কিছু স্ট্যাকের ভিত্তিক ঠাট সঙ্গে নিচে বর্ণিত। ইনপুট ফর্ম্যাট হয় day, year, month। আউটপুট ফর্ম্যাট হয় 0-indexed with Sunday as 0। গল্ফিং পরামর্শ স্বাগত! এটি অনলাইন চেষ্টা করুন!

;"0032503514624"Ei)3>±+;¼L;¼¼½L±kΣ7@%

ব্যাখ্যা

                     Implicit input: day, year, month (month is at TOS)
;"0032503514624"Ei)  Get the month code, convert to float, rotate to bottom of the stack
3>±+                 If 3>month, add -1 to year
;¼L                  Push floor(year/4) to stack
;¼¼½L±               Push floor(year/4) and append -floor(year/128) to stack.
kΣ                   Wrap the stack (y/128, y/4, y, month_code, d) in a list and sum
7@%                  Get the sum modulo 7
                     Implicit return

2

জেলি , 32 31 30 28 বাইট

আরেকটি বন্দর notjagan এর পরিমার্জন এর Sakamoto এর এলগরিদম কিন্তু স্থানে একটি বেস-250 নম্বর দিয়ে 032503514624(অতিরিক্ত প্রয়োজন হবে না 0কারণ জেলি 1-সূচীবদ্ধ করা হয়)। ইনপুট ফর্ম্যাট হয় month, year, day। আউটপুট ফর্ম্যাট হয় 0-based with Sunday as 0। লিঙ্কগুলি যেভাবে সাজানো শক্ত ছিল এবং এখনও গল্ফযোগ্য হতে পারে তাই গল্ফিংয়ের পরামর্শটি অত্যন্ত স্বাগত। এটি অনলাইন চেষ্টা করুন!

সম্পাদনা করুন: -1 পূর্ণসংখ্যা বিভাগের পরিবর্তে বিট শিফট ব্যবহার করে বাইট করুন । শুরু এবং ইনপুট ফর্ম্যাটটিকে পুনরায় সাজানো থেকে -1 বাইট। -২ বাইটস এরিককে আউটগোল্ফার এবং কেয়ারড কোইনারিংহাহিংকে ধন্যবাদ জানায়।

3>_@µæ»7,2I+µ“Ṿ⁵Ḥ9{’D³ị+⁵+%7

ব্যাখ্যা

         Three arguments: month, year, day
3>_@     Subtract (month<3) from year. Call it y.
µ        Start a new monadic chain.
æ»7,2    Bit shift y by both 7 and 2 (equivalent to integer division by 128 and by 4).
I+       y + y/4 - y/128
µ        Start a new monadic chain.
“Ṿ⁵Ḥ9{’  The number 732573514624 in base 250.
D        The list [7, 3, 2, 5, 7, 3, 5, 1, 4, 6, 2, 4].
³ị       Get the month code from the list (1-based indexing).
+⁵+      Add y, our month code, and day together.
%7       Modulus 7.

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