【问题标题】:Ruby Permutation (Builtin) - Result does not contain adjacent identical lettersRuby Permutation (Builtin) - 结果不包含相邻的相同字母
【发布时间】:2011-05-31 22:50:52
【问题描述】:

感谢您昨天的帮助,也感谢您教会了我一些新东西。 :)

我有另一个基于排列的问题...我的算法有效,但是我遇到的问题是生成的列表中缺少相同的相邻字符。

例如,如果我有字符列表 a-z、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”,这会一直持续到程序完成。

我确定我遗漏了什么,只是不确定是什么?

【问题讨论】:

  • 您可以像这样生成您的字母表:[[*'a'..'z'], [*'0'..'9'], '-'].flatten。在 1.9 中,您甚至可以使用 [*?a..?z, ?0..?9, '-']
  • 我还能使用permutation还是需要使用repeat_permutation等其他方法?
  • 你想要的是repeated_permutation。 :-)

标签: ruby permutation ruby-1.8


【解决方案1】:

我认为您想使用重复排列而不是排列。

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

它将生成包括“file-bb.txt”在内的所有排列。

【讨论】:

  • 看起来它可以完成这项工作。 :) 我现在不知道为什么它不喜欢它... test.rb:10: #<0xb77d1f74>
【解决方案2】:

那是what a permutation is。 [1,2,3] 仅有的 6 个排列是

123
132
213
231
312
321

【讨论】:

  • 哇...在这种情况下,我一定误解了排列一词,因为我认为使用您的示例,我们也会有 112、122 等,因为它们也是独一无二的。现在我需要找到另一种方法来做我想做的事? :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2011-12-06
  • 2018-01-10
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多