何時ごろにファイルを編集することが多い?

30分プログラム、その602。何時ごろにファイルを編集することが多いかを調べてみよう。
Twitterの発言を分析するツールだと、何時ごろの発言が多いかを表示してくれる。すると、いつも何時ごろかヒマか分かっておもしろかったりする。
というわけで、それをファイルについてやってみよう。

ファイルの編集時間だしバラバラになるだろうと思ってやってきたけど、かなり偏りがあることが分かった。ボクは30分プログラムを20時ごろにやることが多いらしい。

使い方

$ ghc --make editTime
$ ./editTime *(.)
 0:
 1:
 2:
 3:
 4:
 5:
 6: *
 7: *****
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: ********************************************************
21: *********
22: *************************
23:
24:

ソースコード

import System.Directory
import System.Time
import System.Environment
import Data.List
import Text.Printf


getHour :: FilePath -> IO Int
classify :: [Int] -> [(Int,Int)]

getHour filePath = do t  <- getModificationTime filePath
                      ct <- toCalendarTime t
                      return $ ctHour ct

-- 効率が悪い。直感によれば、O(n^2)。
classify xs = loop 0 xs
    where loop 25 _  = []
          loop  n xs = let (ys,zs) = partition (== n) xs in
                       (n,length ys):loop (n+1) zs

main = do files <- getArgs
          times <- mapM getHour files >>= return . classify
          mapM_  (\(time,n) -> printf "%2d: %s\n" time $ replicate n '*') times