http://ja.doukaku.org/289/
- YYYYMMDD形式で書き下した日付が回文になる日を探して列挙してください。探すのは西暦4桁の範囲(YYYY年MM月DD日)とします。
例えば、2010年1月2日をYYYYMMDD形式で書き下すと 20100102 となり、逆から読んでも 20100102 になります。
また、日付を扱うライブラリを利用した場合はそのように明記してください。
余裕のある方は以下にもチャレンジしてください。
- 他の形式(e.g. DDMMYYYY形式など)で回文になる日付を探せるように改良してください。
※ちなみに、日本では年月日の順で表記するのが一般的ですが、表記の順番は国によってバラバラのようです。
R はベクトル演算が得意
d <- seq(as.Date("1000-01-01"), as.Date("9999-12-31"), by=1)
d1 <- matrix(unlist(strsplit(as.character(d), "")), 10)
d2 <- (d1[1,] == d1[10,]) & (d1[2,] == d1[9,]) & (d1[3,] == d1[7,]) & (d1[4,] == d1[6,])
print(d[d2])
331 個ある。古い White MacBook で 84 秒ほどかかる。
> system.time({
+ d <- seq(as.Date("1000-01-01"), as.Date("9999-12-31"), by=1)
+ d1 <- matrix(unlist(strsplit(as.character(d), "")), 10)
+ d2 <- (d1[1,] == d1[10,]) & (d1[2,] == d1[9,]) & (d1[3,] == d1[7,]) & (d1[4,] == d1[6,])
+ print(d[d2])
+ })
[1] "1001-10-01" "1010-01-01" "1011-11-01"
[4] "1020-02-01" "1021-12-01" "1030-03-01"
:
[325] "9230-03-29" "9240-04-29" "9250-05-29"
[328] "9260-06-29" "9270-07-29" "9280-08-29"
[331] "9290-09-29"
ユーザ システム 経過
84.676 16.192 172.650
※コメント投稿者のブログIDはブログ作成者のみに通知されます