Life Goes On

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

38問目

192384576は、192×=192, 192×2=386, 192×3=576をつなげた数である。このように、ある数に1,2,..n(n>1)をかけた数をつなげて、1から9の数字が1回ずつ現れる数を作るとき、その最大のものを求める。
何の工夫もありませんが、問題を忠実に実装したら解けました。

import Data.List

main = print $ maximum euler038

euler038 :: [String]
euler038 = filter ((== "123456789") . sort) $ map concatProduct [1..9876]

concatProduct :: Int -> String
concatProduct n =
    head $ dropWhile ((< 9) . length) $ scanl1 (++) $ map (show . (* n)) [1..]