Project Euler Problem 43
問題
The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property. Let d(1) be the 1st digit, d(2) be the 2nd digit, and so on. In this way, we note the following: * d(2)_(3)d(4)=406 is divisible by 2 * d(3)d(4)d(5)=063 is divisible by 3 * d(4)d(5)d(6)=635 is divisible by 5 * d(5)d(6)d(7)=357 is divisible by 7 * d(6)d(7)d(8)=572 is divisible by 11 * d(7)d(8)d(9)=728 is divisible by 13 * d(8)d(9)d(10)=289 is divisible by 17 Find the sum of all 0 to 9 pandigital numbers with this property.
ソース
divs = [0, 0, 2, 3, 5, 7, 11, 13, 17] puts (0..9).to_a.permutation(10).inject(0){|s, d| s + ((2..8).all?{|n| (d[n - 1...n + 2].join.to_i % divs[n]).zero?} ? d.join.to_i : 0) }
解答
16695334890
感想
答えを出すのに少し時間がかかりますが、簡潔なソースができました。
やっぱpermutationってせこいな〜