gpt4 book ai didi

ruby - 如何仅通过多个对象的唯一组合进行迭代?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:26 24 4
gpt4 key购买 nike

标题有点傻。

我正在开发一个用户可以出价的项目。生成的项目可以独占或分配给最多 3 个用户。一个用户可以独占下注 20 美元,另外 3 个用户可以同意进行 3 路拆分,每人只需支付 10 美元,结果是 30 美元,击败第一个出价者。

我需要浏览一份可能有十几个同意三方拆分的不同投标人的名单,以确定获胜的三人组:

Rza                              => $20 # loses
ODB + Gza => $25 # loses
InspectahDeck + Ghostface + ODB => $50 # wins

或者

Rza                              => $100,000 # wins
ODB + Gza => $25 # loses
InspectahDeck + Ghostface + ODB => $50 # loses

我所拥有的只是一个属于各种用户的 Bid 对象数组。我的目标是查看那些希望与其他人分开的人的所有可能组合,看看谁排在首位。

我试着做这样的事情:

bids.each do |bid1|
bids.each do |bid2|
bids.each do |bid3|
# Fill a hash here, but only if the permutation of the bids is unique
end
end
end

我遇到了困难,因为它看起来效率极低并且有大量重复项,有时相同的出价会出现两次。我需要一些帮助或提示来为我指明正确的方向。

我真的很难过

提前致谢。

PS:另一个棘手的细节:每个投标人可以设置多个投标。所以同一个人可以拥有 1 个独占、1 个 2-way 和 1 个 3-way。

最佳答案

假设你有这样的事情:

class Bid
attr_accessor :user # link to the user
attr_accessor :price # dollar amount
attr_accessor :way # 1 means 1-way, 2 means 2-way, 3 means 3-way
end

获得每种类型的最高赌注:

best_1_way  = bids.select{|bid| bid.way == 1}.max
best_2_ways = bids.select{|bid| bid.way == 2}.sort[-2,2]
best_3_ways = bids.select{|bid| bid.way == 3}.sort[-3,3]

获取总价:

total_1_way_price = best_1_way.price
total_2_ways_price = best_2_ways.map(&:price).inject(&:+)
total_3_ways_price = best_3_ways.map(&:price).inject(&:+)

比较这三项,你就赢了。

如果您有很多出价并且想要优化:

all_1_ways, all_2_ways, all_3_ways = 
bids.group_by{|bid| bid.way }.values_at(1,2,3)

关于ruby - 如何仅通过多个对象的唯一组合进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com