We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.

The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.

Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.

HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.


In [1]:
let target = 987654321
let limit = 2000

let isPanDigital9 (s:string) = 
    let sorted = new string (s.ToCharArray() |> Array.sort)
    sorted = "123456789"
    
let panDigitalProduct x y = 
    isPanDigital9 (string(x) + string(y) + string(x * y))
    
let pairWith n = 
    [1..limit]
    |> List.map (fun n2 -> (n,n2))
    
[1..limit]
|> List.filter (fun x -> (x / 987654321) <= limit)
|> List.map pairWith
|> List.concat
|> List.filter (fun (x,y) -> panDigitalProduct x y)
|> List.map (fun (x,y) -> x*y)
|> List.distinct
|> List.sum
    
//panDigitalProduct 39 186


Out[1]:
45228

In [ ]: