Mentre provavo il problema 41 dal progetto Eulero, mi sono imbattuto in quello che sembra essere un bug nell'implementazione di Ruby 1.9 di Array.permutation. Ecco il codice problema isolato:Ruby 1.9 bug? - 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}
La mia uscita per fetta e slice2 è:
slice = 4321
9876
9867
9786
9768
9687
...
Tuttavia, slice3 sgorga, con le cifre da 1 a 4 essere permutati. Anche n = 4 è il primo valore che presenta questo problema. Quando imposto n = 3, ottengo l'output atteso. È un bug o sto codificando male qualcosa? Una rapida ricerca su Google non ha rivelato nulla.
Dolce, grazie! Il mio giapponese è un po 'arrugginito ... no aspetta, qual'è l'altra parola? Oh, giusto, inesistente. Tuttavia posso vedere dal codice su quel collegamento che è lo stesso problema. Ho pensato che non sarei stato il primo ad averlo notato, anche se non mi mancava molto. Ora sono curioso di sapere come è possibile che si sia verificato un errore. Non riesco a concepire le strutture di dati interne che consentirebbero a slice di sembrare giuste, ma fare in modo che la permutazione vada male, e tuttavia andrebbe bene per una fetta di tre. Esiste una discussione in inglese in qualsiasi luogo? –