2011-05-31 26 views
0

謝謝您的幫助,昨天教我一些新的東西爲好。 :)紅寶石置換(內建) - 結果不包含相鄰的相同字母

我有基於排列另一個問題...算法我的作品,但是我有一個相同的相鄰字符從生成的列表中缺少的問題。

例如,如果我有字符列表az,0-9,並且假設最大長度是2,那麼我應該看到aa,bb,cc,dd,ee,ff等等。 。

length = 1 
alphabet = [('a'..'z').to_a, ('0'..'9').to_a, ('-').to_a].flatten 
prefix = 'file-' 
suffix = '.txt' 


while length < 3 


alphabet.permutation(length).each do |x| 

@name = prefix+x.join('').to_s+suffix 
puts @name 

end 

length += 1 

end 

不過,我只看到以下內容:

file-ba.txt 
file-bc.txt 

注意失蹤「BB」,直到節目結束後這種情況持續下去的。

我相信我失去了一些東西,只是不知道是什麼?

+0

您可以像這樣生成您的字母表:[[*'a'..'z'],[*'0'..'9 '],' - ']。flatten'。在1.9中,你甚至可以做'[*?a ..?z,?0 ..?9,' - ']'。 – 2011-05-31 14:59:07

+0

我仍然可以使用排列或我需要使用另一種方法,如repeat_permutation? – 2011-05-31 15:06:13

+1

你想要的是'repeated_permutation'。 :-) – 2011-05-31 15:29:39

回答

3

我想你想使用repeated_permutation代替置換。

http://www.ruby-doc.org/core/classes/Array.html#M000289

它會產生所有排列,包括 「文件bb.txt」。

+1

看起來它會完成這項工作。 :)我現在堅持爲什麼它不喜歡它... test.rb:10:未定義的方法'repeated_permutation'爲#(NoMethodError)。我所做的一切是替代置換repeat_permutation? – 2011-05-31 15:01:57

+0

此方法僅在Ruby 1.9中可用,而您可能使用的是1.8。考慮切換到1.9,這是目前的穩定版本。 – 2011-05-31 15:09:51

+0

謝謝。你是對的,我在Ubuntu上使用1.8(7)...切換到1.9將是一個痛苦,但值得一試。 1.8(7)有沒有辦法做到這一點,但沒有切換到1.9? – 2011-05-31 15:16:56

1

這是what a permutation is。 [1,2,3]中只有6個排列是

123 
132 
213 
231 
312 
321 
+0

哇......我一定誤解了這個例子中的術語排列,因爲我認爲使用你的例子,我們也會有112,122等,因爲它們也是唯一的。現在我需要找到另一種做我想做的事情的方式? :( – 2011-05-31 14:54:41