与えられた数字のケタ数

与えられた数字のケタ数 どう書く?org via 趣味的にっき - 与えられた数字のケタ数より

あえて、数字を文字列にして数える方向は無しの方向で書いてみた。おかげで横長。

Prelude> let keta x = snd $ head $ filter (\(y,z)-> y > x) $ zip (iterate (*10) 10) $ zip [1..] $ iterate (*10) 1  
keta :: (Ord a, Num a, Num t, Enum t, Num a1) => a -> (t, a1)
Prelude> keta 2469
(4,1000)
it :: (Integer, Integer)
Prelude> keta 600 
(3,100)
it :: (Integer, Integer)
Prelude> keta 1  
(1,1)
it :: (Integer, Integer)

あー。早く寝ようと思ったのにこれだ。

追記> ラムダ式のところ、カリー化して、ちょっぴり短くした。

Prelude> let keta x = snd $ head $ filter ((>x).fst) $ zip (iterate (*10) 10) $ zip [1..] $ iterate (*10) 1
keta :: (Ord a, Num a, Num t, Enum t, Num a1) => a -> (t, a1)
Prelude> keta $ 2 ^ 32
(10,1000000000)
it :: (Integer, Integer)
Prelude> keta 600
(3,100)
it :: (Integer, Integer)