回文日付

どう書く?org に出題されてたので考えてみました。コードは書いてません。

leading zero を許す場合

YYYYMMDD の MMDD を決めれば,回文になるという条件から YYYY が一意に決まります。

結果が存在する日付になるかということが問題になりそうですが,年はどんな並びでも許されるので MMDD = 0229 のとき(閏年でなければならない)以外は自明。2/29 のときは YYYY = 9220 となり,閏年なので問題なし。

ということで,すべての MMDD に対して YYYY が一意に存在して YYYYMMDD が回文日付になります。その総数は 366 通り。

leading zero を許さない場合

日付の末尾が 0 になる 10, 20, 30 が除かれるだけです。ただし 2/30 は存在しないので除かれるのは 3 * 12 - 1 = 35 日。総数は 366 - 35 = 331 となります。