-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproblem32.rb
30 lines (24 loc) · 1016 Bytes
/
problem32.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/ruby
require 'euler_helper.rb'
#
<<COMM
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.
COMM
def pandigital? a,b
res = a*b
return false if (res >= 10000) || (res <= 1000) || res.to_s.index('0')
return res if "#{a}#{b}#{res}".split(//).uniq.size == 9
end
perm = (1..9).to_a.permutation(5)
pans = {}
benchmark do
perm.each do |digits|
r = pandigital?(digits[0],digits[1..4].join.to_i)
pans[r] = [digits[0],digits[1..4].join.to_i] if r
r = pandigital?(digits[0..1].join.to_i,digits[2..4].join.to_i)
pans[r] = [digits[0..1].join.to_i,digits[2..4].join.to_i] if r
end
puts sum(pans.keys)
end