Al intentar el problema 41 del Proyecto Euler, me encontré con lo que parece ser un error en la implementación de Ruby 1.9 de Array.permutation. Aquí está el código de problema aislado:Ruby 1.9 error? - 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}
Mi salida para cortar y slice2 es:
slice = 4321
9876
9867
9786
9768
9687
...
Sin embargo, slice3 sale bien, con los dígitos 1 a 4 están permutados. También n = 4 es el primer valor que tiene este problema. Cuando configuro n = 3, obtengo el resultado esperado. ¿Es esto un error, o estoy codificando algo? Una búsqueda rápida en Google no apareció nada.
¡Dulce, gracias! Mi japonés está un poco oxidado ... no, espera, ¿cuál es esa otra palabra? Oh, correcto, inexistente. Sin embargo, puedo ver en el código de ese enlace que es el mismo problema. Pensé que no sería el primero en haberlo notado, aunque no extrañé mucho. Ahora tengo curiosidad sobre cómo es posible que haya ocurrido un error. No puedo concebir las estructuras internas de datos que permitan que slice parezca correcto, pero hacen que la permutación salga mal y, sin embargo, está bien para una porción de tres. ¿Hay alguna discusión en inglés en cualquier lugar? –