Ruby Koans:评分项目答案

时间:2013-05-25 17:15:40

标签: ruby

我无法弄清楚为什么我的代码不起作用!一切似乎都是愚蠢的,但我无法理解足以解决它的错误信息。

def score(dice)
  result  = 0
  counter = Hash.new(0)
  dice.each { |x|
    counter[x] +=1
   }
   counter.each { |x,y|
     case x
      when 1
        if y>3
          result+=1000
          y-=3
        else
          y.times do result+=100
        end
      when 5
        if y>3
          result+=500
          y-=3
          y.times do result+=50
        end
      else
        if y>3
          result+= x*100
        end
      end
    }
end

class AboutScoringProject < EdgeCase::Koan
  def test_score_of_an_empty_list_is_zero
    assert_equal 0, score([])
  end

  def test_score_of_a_single_roll_of_5_is_50
    assert_equal 50, score([5])
  end

  def test_score_of_a_single_roll_of_1_is_100
    assert_equal 100, score([1])
  end

  def test_score_of_multiple_1s_and_5s_is_the_sum_of_individual_scores
    assert_equal 300, score([1,5,5,1])
  end

  def test_score_of_single_2s_3s_4s_and_6s_are_zero
    assert_equal 0, score([2,3,4,6])
  end

  def test_score_of_a_triple_1_is_1000
    assert_equal 1000, score([1,1,1])
  end

  def test_score_of_other_triples_is_100x
    assert_equal 200, score([2,2,2])
    assert_equal 300, score([3,3,3])
    assert_equal 400, score([4,4,4])
    assert_equal 500, score([5,5,5])
    assert_equal 600, score([6,6,6])
  end

  def test_score_of_mixed_is_sum
    assert_equal 250, score([2,5,2,2,3])
    assert_equal 550, score([5,5,5,5])
  end

end

any1有想法吗?

1 个答案:

答案 0 :(得分:2)

您错过了上面发布的代码中的两个end

更改代码并写为:

case x
    when 1
      if y>3
        result+=1000
        y-=3
      else
        y.times { result+=100 }
      end
    when 5
      if y>3
        result+=500
        y-=3
        y.times { result+=50 }
      end
    else
      if y>3
        result+= x*100
      end
end