h-index #2

「わかりやすいコードではないなぁ」と言われたけど、さてどうしたものか。
命名をがんばる。

hindex :: [Int] -> Int
hindex lst = length $ takeWhile cond rankedList
  where
    rankedList = zip (sortBy (flip compare) lst) [1..]
    cond (val, rank) = val >= rank

効率は考えずに定義どおりやる。

hindex :: [Int] -> Int
hindex lst = foldl max 0 (filter cond [1 .. length lst])
  where
    cond n = (length $ filter ((<=) n) lst) >= n

cond という名前がいかにもひどいけど、いい名前が思い浮かばない。