与えられた数字のケタ数
与えられた数字のケタ数 どう書く?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)