我在Ruby中做了一个测验,要求我找出口味和配料之间的独特组合的总数,但我被困在了一个特定的部分。其中一个规则是“巧克力片冰淇淋不能有巧克力片配料”或类似的措辞。这不是确切的问题,但我尽了最大努力创造了一个类似的问题。我该如何解决这个问题?
def combinations(flavors, toppings)
end
flavors = ["fudge", "vanilla", "chocolate chip", "cookie dough"] # 11
toppings = ["chocolate chips", "sprinkles", "mint"]
我首先想到的是做一个嵌套循环的问题,但是我被困在了巧克力片和巧克力片是不一样的。
3条答案
按热度按时间vfh0ocws1#
考虑类似的情况,使用
#product
查找所有组合,然后使用#reject
排除不符合条件的组合。在下面的示例中,第二个字符串不能包含第一个字符串。如果找不到子字符串,
#index
将返回nil
。kqqjbcuj2#
如果这是一个测验题,我不想把它完全泄露出去,但是在解决编程问题时,一个好的开始是把它分解成更小的步骤。我认为下面的内容应该会给你一个很好的提示。
1.定义两种口味相同的含义。“巧克力片”和“巧克力片”是一样的吗?(注意"s"是不同的)“巧克力”冰淇淋加“巧克力片”怎么样?一种方法是说,如果一种是另一种的子串,那么两种口味是相等的。另一种稍微难一点的方法是说,它们必须完全相同,把复数形式规范化。给自己写一个可以接受两种口味的函数,然后给予你一个
true
/false
的答案。提示:如果您使用第一个定义,请查看
String
上#include?
方法的文档,并记住您可能事先不知道哪个字符串是另一个字符串的子字符串。1.当从两个数组中的每一个取一个元素时,构建所有可能对的列表。
提示:查看@jvx8ss中提到的
Array
上的#product
方法。1.根据步骤1中的定义,删除两个元素相等的所有对。
提示:查看
Array
上的#reject
方法。所有相关文档均可在https://ruby-doc.org/3.1.3/中找到
yc0p9oo03#
根据Chris的回答,不仅考虑到第一个字符串不应该包含在第二个字符串中,而且考虑到第二个字符串不应该包含在第一个字符串中,我认为在用reject进行检查之前先对数组进行排序可能会稍微好一点。