裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

回文日付

2011年02月16日 | ブログラミング

http://ja.doukaku.org/289/

  1. YYYYMMDD形式で書き下した日付が回文になる日を探して列挙してください。探すのは西暦4桁の範囲(YYYY年MM月DD日)とします。

例えば、2010年1月2日をYYYYMMDD形式で書き下すと 20100102 となり、逆から読んでも 20100102 になります。

また、日付を扱うライブラリを利用した場合はそのように明記してください。

余裕のある方は以下にもチャレンジしてください。

  1. 他の形式(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

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« バイナリクロック | トップ | 文字列型日時ののN秒後時間取得 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事