中学時代の塾の数学講師がこんなツイートをしていました。
0001/01/01 から 9999/12/31 の間に,8個の数字が2種類の数字だけで表される日は全部で643回あり,今日はその391番目にあたります。
— 浜田昌宏 / 浜田塾 (@hamadajuku) 2022年2月21日
8個の数字が1種類の数字だけで表される日は 1111/11/11 の1回だけです。
そこでRubyでプログラムを書いてみました。コードは以下のとおり。
8個の数字が2種類で表せるときの日付はcsvファイルに書き出すようにしました。
# -*- coding:utf-8 -*- # 2022-02-23 require 'date' require 'csv' st = Date.new(0001,01,01) en = Date.new(9999,12,31) dmax = (en-st).to_i # 返り値がRationalなので整数にする n = 0 # counter arr = Array.new f = CSV.open('test.csv','w') header = ["n","date"] f.puts(header) for d in 0..dmax date = st+d str = date.strftime("%Y%m%d") str2 = str.split(//) count = str2.uniq.count if (count==2) then n +=1 sdate = date.strftime("%Y/%m/%d") sn = sprintf("%3d",n) #f.puts ["n = #{sn}", "date = #{sdate}"] f.puts [sn, sdate] arr.push(sdate) end end f.close puts "#### 2022-02-22 ####" i = 391 si = sprintf("%3d",i) puts "n = #{si}", "date = #{arr[i-1]}"
実行したときの結果は次のとおり。
matsuba@debian:~/tmp4$ time ruby main.rb #### 2022-02-22 #### n = 391 date = 2022/02/22 real 0m28.204s user 0m28.163s sys 0m0.020s
8個の数字が1種類の数字だけで表される日は 1111/11/11 の1回だけ
というところまでは検証していませんが、これは自明ですから省略します。
ちなみに実行環境は次のとおりです。
matsuba@debian:~/tmp4$ uname -a Linux debian 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64 GNU/Linux matsuba@debian:~/tmp4$ cat /etc/debian_version 10.11 matsuba@debian:~/tmp4$ ruby -v ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux-gnu]