euler/Problem049.hs

24 lines
923 B
Haskell

-- The arithmetic sequence, 1487, 4817, 8147, in which each of the terms
-- increases by 3330, is unusual in two ways: (i) each of the three terms are
-- prime, and, (ii) each of the 4-digit numbers are permutations of one
-- another.
--
-- There are no arithmetic sequences made up of three 1-, 2-, or 3-digit
-- primes, exhibiting this property, but there is one other 4-digit increasing
-- sequence.
--
-- What 12-digit number do you form by concatenating the three terms in this
-- sequence?
import Euler
main = print $ head $ do
p <- takeWhile (<= 9999) $ dropWhile (<= 1487) $ primes
p' <- takeWhile (<= 9999) $ dropWhile (<= p) $ primes
let p'' = 2 * p' - p
guard $ p'' <= 9999
guard $ p'' `elem` takeWhile (<= p'') primes
guard $ sort (toDigits p) == sort (toDigits p')
guard $ sort (toDigits p') == sort (toDigits p'')
return $ fromDigits $ toDigits p ++ toDigits p' ++ toDigits p''