2010-08-19 29 views
5

यूलर प्रोजेक्ट से समस्या 41 की कोशिश करते समय, मैंने Array.permutation के रूबी 1.9 कार्यान्वयन में एक बग प्रतीत होता है। यहाँ समस्या पृथक कोड है:रूबी 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} 

टुकड़ा और slice2 के लिए मेरे उत्पादन है:

slice = 4321 
9876 
9867 
9786 
9768 
9687 
... 

हालांकि, slice3 अंक 1 से 4 permuted जा रहा है के साथ बाहर सही आता है,। इसके अलावा n = 4 पहला मान है जिसमें यह समस्या है। जब मैं n = 3 सेट करता हूं, तो मुझे अपेक्षित आउटपुट मिलता है। क्या यह एक बग है, या क्या मैं कुछ गलत कोडिंग कर रहा हूं? एक त्वरित Google खोज ने कुछ भी नहीं बदला।

उत्तर

6

यह known bug है जो 1.9.2p136 और नए में तय किया गया है।

इसके चारों ओर

सबसे आसान तरीका है, तो सबसे हाल रूबी को अद्यतन करने के अलावा, बीमा करने के लिए अपने सरणी "साझा" नहीं है, या तो एक नया एक (अपने slice3 की तरह) का निर्माण करके, है या बस "संशोधित" यह, उदा slice += []

+3

मीठे, धन्यवाद! मेरा जापानी थोड़ा जंगली है ... कोई इंतजार नहीं, वह दूसरा शब्द क्या है? ओह, ठीक है, अस्तित्वहीन नहीं है। हालांकि मैं उस लिंक पर कोड से देख सकता हूं कि यह वही मुद्दा है। मैंने सोचा कि मैं इसे पहली बार नहीं देखूंगा, हालांकि मुझे बहुत याद नहीं आया। अब मुझे उत्सुकता है कि यह कैसे संभव है कि बग हुआ। मैं आंतरिक डेटा संरचनाओं की कल्पना नहीं कर सकता जो टुकड़ा सही लगने की अनुमति देगी, लेकिन क्रमपरिवर्तन गलत होने के लिए, और फिर भी तीन के टुकड़े के लिए ठीक हो। क्या इसके बारे में कोई अंग्रेजी भाषा चर्चा है? –

संबंधित मुद्दे