【揺花草子。】[#3285] 辿り着く。
Bさん「おとといから話題に挙げている令和変換ロジック。」
Aさん「またその話題かよ。引っ張るな。」
Cさん「阿部さんが昨日コミットしてプルリクを投げたコードは
西暦2100年以降成り立たなくなるので拒否となったわ。」
Aさん「プルリクを投げた覚えはないんですけど。
それにアルゴリズム自体は正しいでしょう。
単に西暦2100年以降の場合に西暦下2桁と言う前提が
誤っているだけで。」
Bさん「つまり呼び出し側に問題があると。」
Aさん「そう言う事だと思うよ?
2100年以降、例えば2121年と今年2021年の区別は
アルゴリズム的には下2桁だけでは判断できないわけだから。」
Bさん「そこも勘案するアルゴリズムにするとどうなる?
もちろん2100年以降、2200年代も2900年代も3000年代も10000年代も
これ1個のアルゴリズムで成り立ちます、ってやつを希望だよ。」
Aさん「呼び出し側のアルゴリズムって事だよね。
下2桁が成り立つのは2099年までで、2100年代には破綻するわけで・・・」
Cさん「ちなみに西暦2100年は令和82年よ。
西暦2200年は令和182年だし、西暦3000年は令和982年。
西暦10000年は令和7982年よ。」
Aさん「うーん・・・そうなると、西暦の下2桁を切り落とした残りの数字を
うまく使う事になるね。
2100年代なら 21 を、2200年代なら 22 を、10000年代なら 100 を、
って感じに。」
Bさん「ふむふむ。」
Aさん「西暦の下2桁を切り落とした数字から 21 を減じて、
その値 * 100 に 82 を足し、そのうえで西暦下2桁の値を足すって感じでどうだろう。」
Cさん「なるほど。それなら西暦2100年は (21 - 21) * 100 + 82 + 0 で令和82年、
西暦2200年は (22 - 21) * 100 + 82 で令和182年、
西暦10000年は (100 - 21) * 100 + 82 で令和7982年になるわね。」
Aさん「でしょう。」
Bさん「でもそのアルゴリズムだと今年2021年は (20 - 21) * 100 + 82 で
令和 -18年になるよ?」
Aさん「マイナス18年!!!
いや、そこは、西暦が2100年以降ならと言う条件分岐で・・・
2000年代なら例の西暦下2桁を足し込むってやつで・・・」
Bさん「ダメダメ!!
if 文とか switch 文とか三項演算子なんてのはプログラマー的発想だよ。
もう少し一般の皆さんに届きやすい
キャッチーでウィットでセンセーショナルなアルゴリズムをお願いするよ。」
Aさん「なんでそんな南極レポートみたいなアルゴリズムを要求するの?」
Cさん「『よりもい』再 OA だからね。」
Aさん「ですけども!!
そして今回も多分すごい感動すると思いますけども!!!」
Bさん「ともかく、複雑な条件なく、西暦何年でも通用する
素敵なアルゴリズムが欲しいんだよ。」
Aさん「いやー・・・そんなん無理じゃない・・・?」
Bさん「そんなことない。
ぼくは完璧な解を既に導き出している。」
Aさん「えっ・・・そうなの?
どんなのさ?」
Bさん「西暦の値から 2018 を引く。」
Aさん「最初に言ったやつ!!!!!」
結局これがベスト。




