指定された西暦がうるう年(閏年)かどうかの求め方は知っているかな?
そのためにはまず、うるう年(閏年)の定義を確認する必要がある。
ここは日本だ。だから日本の法律を確認しよう。
日本で閏年に関する法律は、次のものである。
これに基づいて実装する。
まず、法律の内容を実装する前準備として 西暦を神武天皇即位紀元(皇紀) に変換する必要がある。
year_kouki = year_ad + 660
さて、まず最初の部分「神武天皇即位紀元年数ノ四ヲ以テ整除シ得ヘキ年ヲ閏年トス」だけでコードにすると次のようになる。
year_kouki % 4 == 0
しかしながら、法律では「但シ~」と続く。
「紀元年数ヨリ六百六十ヲ減シテ百ヲ以テ整除シ得ヘキモノ」は次の条件を満たす年のことである。
(year_kouki - 660) % 100 == 0
その続きの部分も含めて「紀元年数ヨリ六百六十ヲ減シテ百ヲ以テ整除シ得ヘキモノノ中更ニ四ヲ以テ商ヲ整除シ得サル年」は
((year_kouki - 660) % 100 == 0) and ((year_kouki - 660) // 100) % 4 != 0)
これを最初と合わせると
(year_kouki % 4 == 0) and (
not (((year_kouki - 660) % 100 == 0) and (((year_kouki - 660) // 100) % 4 != 0)))
となる。
これを関数にすると次のようになる。
is_japanese_strict_leapyear.py
def is_japanese_strict_leapyear(year_ad):
year_kouki = year_ad + 660
return (year_kouki % 4 == 0) and (
not (((year_kouki - 660) % 100 == 0) and (((year_kouki - 660) // 100) % 4 != 0)))
法律はきちんと守りましょう(ヲイ)
・・・エープリルフールネタにすればよかったか。