euler/haskell/e049.hs

28 lines
766 B
Haskell

import Data.Function
import Data.List
import qualified Data.Set as S
prims = fix (\f (x:xs) -> x:f (filter (\y -> rem y x /= 0) xs)) [2..]
--permu :: Integer -> S.Set Integer
permu :: Integer -> S.Set Integer
permu = S.fromList . map read . permutations . show
primsList = dropWhile (< 1000) $ takeWhile (< 10000) prims
primsSet = S.fromList primsList
candidates :: [[Integer]]
candidates = map (\prim -> S.toList $ S.intersection primsSet (permu prim)) primsList
candidates' = filter (\x -> 3 <= length x) candidates
candidates'' = map sort candidates'
--permu' :: [a] -> [[a]]
permu' [] = []
permu' (x:xs) = [map permu' y | y <- tails xs]
--permu3 xs = filter (\(a:b:c:[]) -> a < b && b < c && b - a == c - b) $ nub $ map (take 3) $ permutations xs