Guest User

Untitled

a guest
Feb 19th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. require 'rubygems'
  2. require "test/unit"
  3. require "shoulda"
  4.  
  5. def score(roll)
  6. accum = 0
  7.  
  8. raise ArgumentError unless roll.is_a? Array
  9. raise RuntimeError unless roll.any?{|r| r.is_a? Fixnum }
  10. raise RuntimeError if roll.any?{|r| r < 1}
  11.  
  12. accum += 100 if single_detector(roll, 1)
  13. accum += 50 if single_detector(roll, 5)
  14.  
  15. (1..6).each do |num|
  16. if roll.find_all{|n| num == n}.length >= 3
  17. score = num == 1 ? 1000 : 100
  18. accum += score * num
  19. end
  20. end
  21.  
  22. accum
  23. end
  24.  
  25. def single_detector(roll, number)
  26. roll.find_all{|n| n == number}.length == 1
  27. end
  28.  
  29. def assert_score(score, roll)
  30. assert_equal(score, score(roll))
  31. end
  32.  
  33. class TestGreed < Test::Unit::TestCase
  34.  
  35. context "with valid data" do
  36. context "a single die" do
  37. should "score 100 if 1" do
  38. assert_score(100, [1])
  39. end
  40. should "score 50 if 5" do
  41. assert_score(50, [5])
  42. end
  43. end
  44.  
  45. should "score triples as 100 * the triple unless it is 1" do
  46. assert_score(300, [3,3,3])
  47. assert_score(400, [4,4,4])
  48. assert_score(500, [5,5,5])
  49. end
  50.  
  51. should "score triple 1's as 1000" do
  52. assert_score(1000, [1,1,1])
  53. end
  54.  
  55. should "score 3,4,2,4,4 as 400" do
  56. assert_score(400, [3,4,2,4,4])
  57. end
  58.  
  59. should "score 4,4,4,4,1 as 400" do
  60. assert_score(500, [4,4,4,4,1])
  61. end
  62.  
  63. should "score 2,1,1,3,1" do
  64. assert_score(1000, [2,1,1,3,1])
  65. end
  66. end
  67.  
  68. context "with invalid data" do
  69. should "raise an ArgumentError if an array is not passed" do
  70. assert_raise(ArgumentError) do
  71. score("a bad string")
  72. end
  73. end
  74.  
  75. should "raise a RuntimeError if the array contains non integers" do
  76. assert_raise(RuntimeError) do
  77. score(%w[a b c 1 3])
  78. end
  79. end
  80.  
  81. should "raise a RuntimeError if the array contains negative numbers" do
  82. assert_raise(RuntimeError) do
  83. score([-1])
  84. end
  85. end
  86. end
  87. end
Add Comment
Please, Sign In to add comment