Guest User

Untitled

a guest
Feb 18th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. require File.expand_path(File.dirname(__FILE__) + '/edgecase')
  2.  
  3. # Greed is a dice game where you roll up to five dice to accumulate
  4. # points. The following "score" function will be used to calculate the
  5. # score of a single roll of the dice.
  6. #
  7. # A greed roll is scored as follows:
  8. #
  9. # * A set of three ones is 1000 points
  10. #
  11. # * A set of three numbers (other than ones) is worth 100 times the
  12. # number. (e.g. three fives is 500 points).
  13. #
  14. # * A one (that is not part of a set of three) is worth 100 points.
  15. #
  16. # * A five (that is not part of a set of three) is worth 50 points.
  17. #
  18. # * Everything else is worth 0 points.
  19. #
  20. #
  21. # Examples:
  22. #
  23. # score([1,1,1,5,1]) => 1150 points
  24. # score([2,3,4,6,2]) => 0 points
  25. # score([3,4,5,3,3]) => 350 points
  26. # score([1,5,1,2,4]) => 250 points
  27. #
  28. # More scoring examples are given in the tests below:
  29. #
  30. # Your goal is to write the score method.
  31.  
  32. def score(dice)
  33. score = 0
  34. return score if dice.empty?
  35. counts = [0,0,0,0,0,0]
  36. dice.each {|d| counts[d-1] += 1 }
  37.  
  38. ones, twos, threes, fours, fives, sixes = counts
  39.  
  40. if ones >= 3 then
  41. score += 1000 + ((ones-3) * 100)
  42. else
  43. score += (ones * 100)
  44. end
  45.  
  46. if fives >= 3 then
  47. score += 500 + ((fives-3) * 50)
  48. else
  49. score += fives * 50
  50. end
  51.  
  52. score += 200 if twos >= 3
  53. score += 300 if threes >= 3
  54. score += 400 if fours >= 3
  55. score += 600 if sixes >= 3
  56.  
  57. score
  58. end
  59.  
  60. class AboutScoringProject < EdgeCase::Koan
  61. def test_score_of_an_empty_list_is_zero
  62. assert_equal 0, score([])
  63. end
  64.  
  65. def test_score_of_a_single_roll_of_5_is_50
  66. assert_equal 50, score([5])
  67. end
  68.  
  69. def test_score_of_a_single_roll_of_1_is_100
  70. assert_equal 100, score([1])
  71. end
  72.  
  73. def test_score_of_multiple_1s_and_5s_is_the_sum_of_individual_scores
  74. assert_equal 300, score([1,5,5,1])
  75. end
  76.  
  77. def test_score_of_single_2s_3s_4s_and_6s_are_zero
  78. assert_equal 0, score([2,3,4,6])
  79. end
  80.  
  81. def test_score_of_a_triple_1_is_1000
  82. assert_equal 1000, score([1,1,1])
  83. end
  84.  
  85. def test_score_of_other_triples_is_100x
  86. assert_equal 200, score([2,2,2])
  87. assert_equal 300, score([3,3,3])
  88. assert_equal 400, score([4,4,4])
  89. assert_equal 500, score([5,5,5])
  90. assert_equal 600, score([6,6,6])
  91. end
  92.  
  93. def test_score_of_mixed_is_sum
  94. assert_equal 250, score([2,5,2,2,3])
  95. assert_equal 550, score([5,5,5,5])
  96. end
  97.  
  98. end
Add Comment
Please, Sign In to add comment