過去一時間で一番使ったコマンドは?(失敗)
30分プログラム、その531。過去一時間で一番使ったコマンドを数えてみよとして失敗した。
よく考えたら、過去一時間ってことは現在時刻から一時間を引かないといけなんだよね。先頭と同じ時刻のやつだけとってもダメなんだよね。
22:20 ls 22:40 git 23:00 echo # <- ここまでしか見ない 23:10 echo 23:15 ls 23:20 ls # <- 今ここ
そういえば前も同じミスをした気がする。
明日、直そう。
使い方
$ history -E 1 | runghc freq-command.hs history-all 20 history 7 ls 4 echo 2 code/croquis 1 google 1 man 1 runghc 1
ソースコード
import Data.List split :: Eq a => a -> [a] -> [[a]] split _ [] = [] split x xs = let (ys,zs) = break (==x) xs in if ys == [] then split x $ dropWhile (==x) zs else ys : split x (dropWhile (==x) zs) -- "11342 20.2.2009 22:33 history -E 1" parse line = case split ' ' line of _:_:time:cmd:_ -> let t:_ = split ':' time in (t,cmd) _ -> error "parse error" parseInput = reverse.map parse recent [] = [] recent ys@((t,_):_) = takeWhile (\(x,_) -> x == t) ys countByCmd = sortBy (\a b -> compare (length b) (length a)).group.sort format = unlines.map(\(xs@(x:_)) -> x ++ "\t" ++ (show $ length xs)) freqCommand = format.countByCmd. map snd. recent. parseInput. lines main = interact freqCommand