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ってせこいな〜