Life Goes On

まあまあだけど楽しんでる方です

52問目

http://projecteuler.net/index.php?section=problems&id=52
125874は2倍すると251748となり、元の数と同じ数字で構成されている。同様に2倍、3倍、4倍、5倍、6倍した数が全て同じ数字で構成されるような数を求める。
6倍しても桁数が変わらないことから、元の数の範囲が狭められます(3桁であれば166以下)。あとはその範囲で順番に調べていきます。

import Data.List

main = print $ euler052

euler052 :: Integer
euler052 = head $ filter sameDigits $ numbers

sameDigits :: Integer -> Bool
sameDigits x = all (== (sort $ show x)) (map (sort . show . (* x)) [2..6])

numbers :: [Integer]
numbers = concat [[10^i..(div (10^(i+1)) 6)] | i <- [1..]]