Problem #32

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.
Erlang: Running time = 3.58s
```+%run_procs

+%digit_split

+%pow

+%cartesian_product

+%echo

+%prime_list

+%prime_iterator

+%factor

+%product

+%divisors

p32()->
Ans=run_procs(9877-1234,fun(I)->[euler,p32,[check,I+1233,self()]] end,
fun(A,{done,B})->A+B end,0),
io:format("~w~n",[Ans]).
p32(check,What,Parent)->
D=divisors(What),
p32(check,What,D,Parent,lists:sort(lists:subtract(lists:seq(1,9),digit_split(What)))).
p32(check,_,[],Parent,_)->Parent!{done,0};
p32(check,What,[First|WithThese],Parent,Available)->
Other=What div First,
case Available==lists:sort(lists:append(digit_split(First),digit_split(Other))) of
true->
Parent!{done,What};
false->
p32(check,What,lists:delete(Other,WithThese),Parent,Available)
end.

```
Ruby: Running time = 0.98s
```+#cartesian_product

+#PrimeList

+#factors

+#divisors

+#Enumerable

+#dig_split

def condense(a)
a.join("").to_i
end

def p32
a=(1234..9876).select{|i|s=i.to_s;s.length == s.split("").uniq.length and not s.include?("0")}.select do |i|
sq=Math.sqrt(i)
d=divisors(i).to_a.sort.take_while{|j|j<sq}
remaining=(1..9).to_a-dig_split(i)
d.any?{|j|(dig_split(j)+dig_split(i/j)).sort==remaining}
end
puts a.sum
end

```