一凡人 求職中の素人視点なので、真に受けずに疑って読んでくれ。
本日は2022年02月02日だ。見ての通り、西暦、月、日、十進法で0と2しか使われない。
どうでも良いが、このような2種類の数字しか使わない年月日はどれくらいあるだろう。
例えば、生きている内に、あと何回来るか。次は今月22日か?ではその次は?
0と2だけだと今年まだあって、来年以降2200年2月まで無い。80年後。
1と2だけを使用した年月日だと2111年1月2日だ。90年後だ。
ちなみに2だけを使用した年月日が2222年2月2日にやってくる。
前はいつあったのか?
2002年02月22日で、正解だろうか?すぐには分からない。
ではその前は?その前の前は?あるいは、西暦元年から、このような年月日を列挙するとどんな感じになるのか?
くだらない疑問が尽きなくなってくる。
さて、このような遊び?は実生活では意味が無い。数字がN種類使われているところで、普通の1日だ。
だがしかし、俺はここでゲス推測する。
このような誰でも考えるような事は、コーディング資格試験にでるかもしれない。
暇なのでJavascriptで考えてみよう。
頭の中で少し考えて浮かぶ単純なのはこんな感じだ。
const MINYEARS = 1900; const MAXYEARS = 2100; for ( y = MINYEARS; y <= MAXYEARS; y++ ) { for ( m = 1; m <= 12; m++ ) { for ( d = 1; d <= 31; d++ ) { if ( 28 < d && m == 2 ) { break; } else if ( 30 < d && (m == 4 || m == 6 || m == 9 || m == 11)) { break; } if (2==countNumOccurence(y,m,d)) { console.log(y,m,d); } } } }
いくつか考慮すべき点もあるし、閏年を考慮に入れていないが最初はこんな感じか。上記の例だと1900年以降だが、西暦元年からだと、4200回あり、出力が長くなるのでこうしてある。
countNumOccurence()は何種の数字があるかを数える。色々やりかたあるだろうが、1つは以下の様な感じか。沢山改善できる点があるだろう。バグもあるだろう。
function countNumOccurence(y,m,d) { var s = y.toString()+m.toString()+d.toString(); const nums=['0','1','2','3','4','5','6','7','8','9']; var c = 0; for (let n of nums) { if (s.includes(n)) { c++; } } return c; }
さて、これで見てみると:
前回は2002年2月22日ではなく、2020年2月22日だった。
次回は2022年2月22日ではなく、2022年2月20日だった。今月は3回あった。
だがそれ以降は2111年1月1日になる。
という事でほんの短いモノだがコーディングの練習とする。今後もJavascriptやPython等の短いコードで遊んでみたい。どうだろうか。