ruby - 经验丰富的 Ruby 程序员将如何重写我的迷你游戏?

标签 ruby algorithm loops nested-loops

<分区>

我正在编写一个小型猜谜游戏。我正在编写一个积分计算算法。

我写了以下内容,它有效。但我觉得我正在将过程背景带入 Ruby,或者没有正确利用 Ruby。

有经验的 Ruby 程序员会如何处理这个问题?您可以在 TryRuby.com 上测试代码(在浏览器解释器中复制并粘贴代码)。

# g = guesses
g = [{ id: 1, elmer­: 5, roger: 7, outcome: "Roger Win" },{ id: 2, elmer: 5, roger: 1, outcome: "Elmer Win" },{ id: 3, elmer: 4, roger: 8, outcome: "Roger Win" }]
# r = actual results
r = [{ id: 1, elmer: 3, roger: 9, outcome: "Roger Win" },{ id: 2, elmer: 7, roger: 9, outcome: "Roger Win" },{ id: 3, elmer: 4, roger: 8, outcome: "Roger Win" }]
# points table
p = []    
# rules: correct outcome = 1 point, perfect match = 5 points.

# Loop over results.
r.each do |result|

  # Loop over guesses.
  g.each do |guess|

    # Make sure we compare corresponding ids.
    # So, compare result 1 to guess 1, r2 to g2, etc....
    if result[:id] == guess[:id]

      # Init a hash to store score
      score = {}

      # Did they guess the correct outcome?
      if result[:outcome] == guess[:outcome]

        # Correct outcome guessed! Make a score hash, give'em a point.
        score[:id]     = result[:id]  # game id
        score[:points] = 1            # point

        # Was it a perfect match?
        if result[:elmer] == guess[:elmer] && result[:roger] == guess[:roger]

          # Perfect match! Give them 4 points.
          # They already got 1 point for guessing the correct outcome.
          score[:points] += 4
        end
      end

      # Add the score to the points table
      p.push(score) unless score.empty?
    end
  end
end

最佳答案

你觉得这怎么样?

g.zip(r).collect do |guess, result|
  points = (guess == result) ? 5 : guess[:outcome] == result[:outcome] ? 1 : 0   
  {:id => guess[:id], :points => points} 
end

注意:这假设 g 和 r 按 :id 排序;如果没有,您可以在执行此操作之前进行排序 =) 另外,我会定义:FULL_SCORE = 5CORRECT_OUTCOME_SCORE = 1

关于ruby - 经验丰富的 Ruby 程序员将如何重写我的迷你游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21445888/

相关文章:

c# - 两个求和算法变体 - 优化

loops - 修复与 ArrowLoop

c++ - 在 C++ 中,如何找到直接或间接链接到数组特定元素的数组的所有元素?

Ruby 在看跌期权中不会转义 oct

ruby-on-rails - 使用 Rails constantize inflector 调用命名空间类

ruby-on-rails - 使用 native 扩展安装 capybara-webkit 1.11.1 时出错

Javascript 循环遍历对象集合

javascript - mustache 模板可以进行模板扩展吗?

arrays - 测量阵列连续性

绳索触杆算法