34 lines
983 B
FSharp
34 lines
983 B
FSharp
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 |