module _49 open common let rec insertions x = function | [] -> [[x]] | (y :: ys) as l -> (x::l)::(List.map (fun x -> y::x) (insertions x ys)) let rec permutations = function | [] -> seq [[]] | x :: xs -> Seq.concat (Seq.map (insertions x) (permutations xs)) let primeSequence = let primes = primeArray 10000 |> Seq.skipWhile ((>) 999) |> Array.ofSeq let isPrime = isPrimeFunByArray primes primes |> Seq.map ( numDigits >> List.ofArray >> permutations >> Seq.map (Array.ofList >> digitsNum) >> Seq.filter isPrime >> Seq.distinct >> Seq.sort >> Seq.toArray ) |> Seq.distinct |> Seq.collect (List.ofSeq >> combinations 3) |> Seq.filter (fun a -> a.[2] - a.[1] = a.[1] - a.[0]) |> Seq.map (List.rev >> List.map (numDigits >> Array.map (string) >> Array.fold (+) "") >> List.fold (+) "") //|> Seq.toArray