You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Ruby车手组合中提取最高driver_points并翻倍其分值

Ruby 实现车手车队组合优化与输出

核心逻辑说明

  • 筛选单车队+3名车手的组合,确保总花费不超过目标预算(target=13.5)
  • 对每个有效组合的车手进行调整:
    • 找出driver_points最高的车手,将其移至车手列表首位
    • 计算总积分时,将该车手的积分翻倍,其余车手积分正常累加,再加上车队积分
  • 按总积分从高到低排序后,以表格形式输出结果

完整代码实现

# 模拟数据源:车队与车手数据
teams = [
  { name: "Mercedes", cost: 4.0, team_points: 250 },
  { name: "Red Bull", cost: 3.8, team_points: 240 },
  { name: "Ferrari", cost: 3.5, team_points: 220 },
  { name: "McLaren", cost: 3.2, team_points: 200 }
]

drivers = [
  { name: "Max Verstappen", cost: 4.5, driver_points: 300 },
  { name: "Lewis Hamilton", cost: 4.2, driver_points: 280 },
  { name: "Charles Leclerc", cost: 3.8, driver_points: 260 },
  { name: "Lando Norris", cost: 3.0, driver_points: 220 },
  { name: "Sergio Perez", cost: 3.5, driver_points: 240 },
  { name: "George Russell", cost: 3.2, driver_points: 230 }
]

target_budget = 13.5

# 生成所有符合预算的车队+3车手组合
valid_combinations = []
teams.each do |team|
  # 从车手列表中选3名的所有组合
  drivers.combination(3).each do |driver_group|
    total_cost = team[:cost] + driver_group.sum { |d| d[:cost] }
    next if total_cost > target_budget

    # 处理车手组:找出积分最高的,移到首位
    top_driver = driver_group.max_by { |d| d[:driver_points] }
    sorted_drivers = [top_driver] + driver_group.reject { |d| d == top_driver }

    # 计算总积分:车队积分 + 顶级车手积分*2 + 其余车手积分
    total_points = team[:team_points] + top_driver[:driver_points] * 2 + sorted_drivers[1..-1].sum { |d| d[:driver_points] }

    valid_combinations << {
      team: team[:name],
      drivers: sorted_drivers.map { |d| d[:name] },
      total_cost: total_cost.round(2),
      total_points: total_points
    }
  end
end

# 按总积分降序排序
sorted_combinations = valid_combinations.sort_by { |c| -c[:total_points] }

# 输出表格格式结果
puts "| 排名 | 车队名称 | 车手组合(首位为积分翻倍车手) | 总花费 | 总积分 |"
puts "|------|----------|--------------------------------|--------|--------|"
sorted_combinations.each_with_index do |comb, idx|
  puts "| #{idx+1} | #{comb[:team]} | #{comb[:drivers].join(' / ')} | #{comb[:total_cost]} | #{comb[:total_points]} |"
end

代码解释

  • 数据源模拟:定义了车队和车手的基础数据,包含名称、花费、积分三个核心字段
  • 组合筛选:通过combination(3)生成所有3名车手的组合,结合车队花费判断是否符合预算
  • 车手调整与积分计算:用max_by找出积分最高的车手,重组车手列表后计算总积分(顶级车手积分翻倍)
  • 排序与输出:按总积分降序排列后,用Markdown表格格式打印结果

内容的提问来源于stack exchange,提问作者ldthompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:50:40