lnicola
6/26/2014 - 12:12 PM

ugly.hs

module Main (main) where

import Control.Parallel.Strategies
import Control.Monad
import Data.Char

solve s (x : xs) = (solve x xs >>= \r -> [s + r, s - r]) ++ solve (10 * s + x) xs
solve s _ = [s]

ugly x = x `mod` 2 == 0 || x `mod` 3 == 0 || x `mod` 5 == 0 || x `mod` 7 == 0

ans d = let s = map (\x -> toInteger $ ord x - ord '0') d in
	length $ filter id $ map ugly $ solve (head s) $ tail s

main = putStr =<< liftM (unlines . parMap rnf (\x -> "Case #" ++ (show $ fst x) ++ ": " ++ show (ans (snd x))) . zip [1..] . tail . lines) getContents