我试图用Ruby获取一个单词的所有字谜但我的代码不起作用,我只得到字符串'ant'的三个结果.任何帮助将非常感激.
class Anagram
attr_reader :word
def initialize(word)
@word = word.downcase
end
def anagram_maker
@word_bank = []
index = @word.length
minus_one = index - 1
while (index * minus_one) != 0
anagram = @word.split('').shuffle.join
@word_bank << anagram
index -= 1
end
@word_bank = @word_bank.uniq
end
def display
anagram_maker
if @word_bank.count > 1
@word_bank.each do |anagram|
puts anagram
end
else
puts "Not enough letters for an anagram"
end
end
end
Run Code Online (Sandbox Code Playgroud)
不知道还有什么可以尝试.
你的代码是非常惯用的Ruby.
计算字符串的字谜是计算字符串字符排列的问题,Ruby使这项任务变得非常简单.复制Anagram课程的一个例子是:
class Anagram
def initialize(word)
@word = word
end
def display
# In Ruby 2.0 @word.chars will return an array, no need for `to_a`.
@word.chars.to_a.permutation.map(&:join).uniq.each do |anagram|
puts anagram
end
end
end
anagram = Anagram.new('ant')
anagram.display
# Output
# ant
# atn
# nat
# nta
# tan
# tna
Run Code Online (Sandbox Code Playgroud)
要回答你的问题:你只得到三个字谜,因为方法中的while循环anagram_maker执行了三次(字符串的长度).此外,我想只是改组字符不是产生排列的正确方法,有关实现anagram算法的更多信息,请参阅" 生成字谜的算法".