Ошибка Ruby 1.9? - Array.permutation - PullRequest
5 голосов
/ 19 августа 2010

Испытывая проблему 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 ничего не дал.

1 Ответ

6 голосов
/ 19 августа 2010

Это известная ошибка , исправленная в 1.9.2p136 и новее.

Самый простой способ обойти это, помимо обновления до более поздней версии Ruby, - это обеспечить, чтобы ваш массив не был «общим», либо путем создания нового (например, slice3), либо просто «изменив» его, например. slice += [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...