在Ruby中创建单词组合工具

在Ruby中创建单词组合工具,ruby,Ruby,这是CodeLesson.com上一个类的练习:编写一个程序,接受用户的单词列表。它们可以是每行一个,也可以全部在一行中,并以某种方式进行分隔(可能使用逗号)。然后打印出两个单词的每个组合。例如,如果用户要键入书籍、公共汽车、汽车、飞机,则输出如下: bookbook bookbus bookcar bookplane公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车 carbook carbus carcar carplane planebook planebus pla

这是CodeLesson.com上一个类的练习:编写一个程序,接受用户的单词列表。它们可以是每行一个,也可以全部在一行中,并以某种方式进行分隔(可能使用逗号)。然后打印出两个单词的每个组合。例如,如果用户要键入
书籍、公共汽车、汽车、飞机
,则输出如下:

bookbook bookbus bookcar bookplane公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车公共汽车 carbook carbus carcar carplane planebook planebus planecar Plane“


你需要一个算法来获得“重复排列”。谷歌搜索它,你会发现很多页面上都有解释和算法。因为这是一个学习作业,我不会提供实际的实现:)但请看这里的例子:


现在,你说你的想法都不起作用。也许如果你在问题中加入一些想法,你可以得到一些关于为什么它们不起作用以及如何让算法起作用的具体提示。

如果你想要一个kickstart,那么就使用内置的。如果你自己想做,想办法循环数组;在这个循环中,再次循环。

作为第一个idea,您可以循环单词数组中的每个元素,然后在循环中再次循环每个单词:

# Ask the user for a comma-separated input.
input = gets

# Split the input into an array, and map
# each element of the array to the same 
# element, but with surrounding whitespace
# removed.
words = input.split(',').map { |w| w.strip }

# Iterate over each word.
words.each do |w1|
  # For each word, iterate over 
  # all words once again.
  words.each do |w2|
    # Skip the loop if the two
    # words are the same.
    next if w1 == w2
    puts w1 + w2 
  end
end
然而,有一种更简洁的说法是“循环遍历数组,并在每个循环中再次循环遍历数组”:它被称为重复置换。该方法允许您这样做。它将置换的长度作为参数(在我们的例子中,长度是2:我们在数组上迭代一次,然后在每个循环中迭代一次)

input = gets
words = input.split(',').map { |w| w.strip }
words.repeated_permutation(2) do |w1, w2|
  next if w1 == w2
  puts w1 + w2
end
希望这有帮助