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]:
In [ ]: