128年?仮説的な閏年改革

太陽の年は、によると、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年に1日おきに行われます。

カレンダーを改革する1つの方法は、次のルールです。

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

これは、625,000年間、私たちのカレンダーをもう一度変更する必要はないという利点があります。

全世界が今から始めて、今から4年目のこのシステムを使用すると、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

チャレンジに関する提案やフィードバックは大歓迎です。幸運と良いゴルフ!

ベストアンサー

C (gcc), 60
bytes

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

(gcc)-お試しください!

坂本の方法の簡単な変更。
月、日、年の順番で整数引数として入力し、日数を出力します(0-日曜日に索引付けされます)。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です