裏 RjpWiki

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

文字列型日時ののN秒後時間取得

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

http://ja.doukaku.org/204/

日時を表す文字列と時間(秒)を受け取り
指定された日時からN秒となる日時を出力する関数 DateEx() を作成してください。

関数の仕様は次の通りです。
1. 入力となる日時の書式は任意である。
→ プログラムの都合に合わせてよい。
2. 入力となる時間(秒)は、負の値も許容すること。
また、負の値が指定された場合、指定の日時よりも前の日時を出力すること
3. 出力する日時は入力の日時と同じ書式をとる文字列であること
4. 出力する日時は正規化されていること
5. 出力先は標準出力、または、バッファのいずれでもよい。

たとえば、DateEx("20080827235925",40)ならば
出力は
「20080828000005」です。

余力があれば時間を省略可能とし、
省略された場合は「現在時刻」を利用するようにしてみてください。


DateEx <- function(str=Sys.time(), N=0)
{
return(as.POSIXct(str)+N)
}

実行例
> DateEx("2008-08-27 23:59:25 JST", 40)
[1] "2008-08-28 00:00:05 JST"
> DateEx() # 現在時刻
[1] "2011-02-16 23:28:43 JST"
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

回文日付

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でシェアする

バイナリクロック

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

http://ja.doukaku.org/275/

時刻を二進数相当の表現で出力する時計アプリケーションを書いてください。
20:18の場合,例えば以下の様な出力をするイメージです。

出力例:

■□■□□
□■□□■□

グラフィックウインドウに描くことにしよう

func <- function(a, s, e, y)
{
    text(1, y, paste(ifelse(rev(rawToBits(as.raw(substr(a, s, e)))), "x", "o"), collapse=""))
}
plot(c(0, 2), c(0, 5), type="n", xlab="", ylab="", xaxt="n", yaxt="n", bty="n")
repeat {
    a <- Sys.time()
    rect(0.5, 0.5, 1.5, 4.5, col="white")
    text(1, 4, substr(a, 12, 19))
    func(a, 12, 13, 3)
    func(a, 15, 16, 2)
    func(a, 18, 19, 1)
    repeat {
        if (substr(a, 18, 19) != substr(Sys.time(), 18, 19)) break
    }
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村