Испытывая проблему 41 из проекта Эйлера, я наткнулся на ошибку, которая кажется ошибкой в реализации Ruby 1.9 Array.permutation. Вот код проблемы, изолированный:
n = 4
slice = '987654321'.chars.to_a[-n..-1]
puts "slice = #{slice.join}"
slice.permutation(n) {|perm| puts perm.join}
slice2 = slice.dup
puts "slice2 = #{slice2.join}"
slice2.permutation(n) {|perm| puts perm.join}
slice3 = []
(0...n).each {|i| slice3[i] = slice[i]}
puts "slice3 = #{slice3.join}"
slice3.permutation(n) {|perm| puts perm.join}
Мой вывод для среза и среза2:
slice = 4321
9876
9867
9786
9768
9687
...
Однако, slice3 выходит правильно, с цифрами от 1 до 4 переставляются. Также n = 4 является первым значением, которое имеет эту проблему. Когда я устанавливаю n = 3, я получаю ожидаемый результат. Это ошибка или я что-то неправильно кодирую? Быстрый поиск в Google ничего не дал.