首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >帮我重构我的世界杯挑战脚本

帮我重构我的世界杯挑战脚本
EN

Stack Overflow用户
提问于 2010-06-07 23:43:18
回答 1查看 151关注 0票数 0

我正在设置一些朋友之间的世界杯挑战,并决定练习我的Ruby并编写一个小脚本来自动化这个过程。

问题:

  • 32世界杯预选赛按各自的国际足联排名
  • 8参赛
  • 分成4级,每一项都被指定为一支随机的球队,每个级别的
  • 获胜者都参加所有的比赛:-)

F 211

我写的东西已经足够了,但必须承认是野蛮的力量。但是,在我试图改进我的Ruby时,我承认这段代码并不是最优雅的解决方案,所以我求助于您,专家,为我指明方向。

查看这个gist - https://gist.github.com/91e1f1c392bed8074531可能会更清楚一些。

当前(差的)解决方案

代码语言:javascript
复制
require 'yaml'

@teams = YAML::load(File.open('teams.yaml'))
@players = %w[Player1 Player2 Player3 Player4 Player5 Player6 Player7 Player8]

results = Hash.new
players = @players.sort_by{rand}

players.each_with_index do |p, i|
  results[p] = Array[@teams['teir_one'][i]]
end

second = @players.sort_by{rand}
second.each_with_index do |p, i|
  results[p] << @teams['teir_two'][i]
end

third = @players.sort_by{rand}
third.each_with_index do |p, i|
  results[p] << @teams['teir_three'][i]
end

fourth = @players.sort_by{rand}
fourth.each_with_index do |p, i|
  results[p] << @teams['teir_four'][i]
end

p results

我确信有一种更好的方法来迭代这些层,并复制@players对象(可能是dup()clone()?)

所以从一个球迷到另一个,帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-08 03:03:21

我还在学习Ruby,但这里有一个尝试:

代码语言:javascript
复制
require 'yaml'

tiers   = YAML::load(File.open('world_cup_tiers.yaml'))
players = %w[P1 P2 P3 P4 P5 P6 P7 P8]

draws = Hash.new { |h,k| h[k] = [] }

tiers.each do |tier, teams|
    players.zip(teams.sort_by{rand}).each do |tuple|
        player, team = tuple
        draws[player].push(team)
    end
end

players.each { |player| puts [player, draws[player]].join(' ') }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2993934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档