Problem 30
module Problem_0030
let inline (^) (x:int) n = bigint.Pow((bigint x),n) |> int
// (443839, [4150; 4151; 54748; 92727; 93084; 194979])
// 2180 ms
let find exp =
let n = [| for x in 0..9 -> x^exp |]
let max = [| for i in 0..exp -> "9" |] |> Array.reduce(+) |> int
seq { for n in 0..max -> (string n).PadLeft(exp,'0') }
|> Seq.map (fun s ->
s.ToCharArray()
|> Array.map (string>>int)
|> Array.map (fun i -> n.[i])
|> Array.sum
|> (fun n -> n,s.TrimStart('0')))
|> Seq.filter (fst>>(<=)2)
|> Seq.filter (fun (a,b) -> (string a) = b)
|> Seq.map(fst)
|> Seq.toList
|> (fun l -> List.sum l, l)
let run () =
find 5