mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 04:12:13 +00:00
257 lines
4.2 KiB
Ruby
257 lines
4.2 KiB
Ruby
class Yahtzee
|
|
def self.chance(d1, d2, d3, d4, d5)
|
|
total = 0
|
|
total += d1
|
|
total += d2
|
|
total += d3
|
|
total += d4
|
|
total += d5
|
|
return total
|
|
end
|
|
|
|
def self.yahtzee(dice)
|
|
counts = [0]*(dice.length+1)
|
|
for die in dice do
|
|
counts[die-1] += 1
|
|
end
|
|
for i in 0..counts.size do
|
|
if counts[i] == 5
|
|
return 50
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
def self.ones( d1, d2, d3, d4, d5)
|
|
sum = 0
|
|
if (d1 == 1)
|
|
sum += 1
|
|
end
|
|
if (d2 == 1)
|
|
sum += 1
|
|
end
|
|
if (d3 == 1)
|
|
sum += 1
|
|
end
|
|
if (d4 == 1)
|
|
sum += 1
|
|
end
|
|
if (d5 == 1)
|
|
sum += 1
|
|
end
|
|
|
|
sum
|
|
end
|
|
|
|
def self.twos( d1, d2, d3, d4, d5)
|
|
sum = 0
|
|
if (d1 == 2)
|
|
sum += 2
|
|
end
|
|
if (d2 == 2)
|
|
sum += 2
|
|
end
|
|
if (d3 == 2)
|
|
sum += 2
|
|
end
|
|
if (d4 == 2)
|
|
sum += 2
|
|
end
|
|
if (d5 == 2)
|
|
sum += 2
|
|
end
|
|
return sum
|
|
end
|
|
|
|
def self.threes( d1, d2, d3, d4, d5)
|
|
s = 0
|
|
if (d1 == 3)
|
|
s += 3
|
|
end
|
|
if (d2 == 3)
|
|
s += 3
|
|
end
|
|
if (d3 == 3)
|
|
s += 3
|
|
end
|
|
if (d4 == 3)
|
|
s += 3
|
|
end
|
|
if (d5 == 3)
|
|
s += 3
|
|
end
|
|
return s
|
|
end
|
|
|
|
def initialize(d1, d2, d3, d4, _5)
|
|
@dice = [0]*5
|
|
@dice[0] = d1
|
|
@dice[1] = d2
|
|
@dice[2] = d3
|
|
@dice[3] = d4
|
|
@dice[4] = _5
|
|
end
|
|
|
|
def fours
|
|
sum = 0
|
|
for at in Array 0..4
|
|
if (@dice[at] == 4)
|
|
sum += 4
|
|
end
|
|
end
|
|
return sum
|
|
end
|
|
|
|
def fives()
|
|
s = 0
|
|
i = 0
|
|
for i in (Range.new(0, @dice.size))
|
|
if (@dice[i] == 5)
|
|
s = s + 5
|
|
end
|
|
end
|
|
s
|
|
end
|
|
|
|
def sixes
|
|
sum = 0
|
|
for at in 0..@dice.length
|
|
if (@dice[at] == 6)
|
|
sum = sum + 6
|
|
end
|
|
end
|
|
return sum
|
|
end
|
|
|
|
def self.score_pair( d1, d2, d3, d4, d5)
|
|
counts = [0]*6
|
|
counts[d1-1] += 1
|
|
counts[d2-1] += 1
|
|
counts[d3-1] += 1
|
|
counts[d4-1] += 1
|
|
counts[d5-1] += 1
|
|
at = 0
|
|
(0...6).each do |at|
|
|
if (counts[6-at-1] == 2)
|
|
return (6-at)*2
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
def self.two_pair( d1, d2, d3, d4, d5)
|
|
counts = [0]*6
|
|
counts[d1-1] += 1
|
|
counts[d2-1] += 1
|
|
counts[d3-1] += 1
|
|
counts[d4-1] += 1
|
|
counts[d5-1] += 1
|
|
n = 0
|
|
score = 0
|
|
for i in Array 0..5
|
|
if (counts[6-i-1] == 2)
|
|
n = n+1
|
|
score += (6-i)
|
|
end
|
|
end
|
|
if (n == 2)
|
|
return score * 2
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
|
|
def self.four_of_a_kind( _1, _2, d3, d4, d5)
|
|
tallies = [0]*6
|
|
tallies[_1-1] += 1
|
|
tallies[_2-1] += 1
|
|
tallies[d3-1] += 1
|
|
tallies[d4-1] += 1
|
|
tallies[d5-1] += 1
|
|
for i in (0..6)
|
|
if (tallies[i] == 4)
|
|
return (i+1) * 4
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
def self.three_of_a_kind( d1, d2, d3, d4, d5)
|
|
t = [0]*6
|
|
t[d1-1] += 1
|
|
t[d2-1] += 1
|
|
t[d3-1] += 1
|
|
t[d4-1] += 1
|
|
t[d5-1] += 1
|
|
for i in [0,1,2,3,4,5]
|
|
if (t[i] == 3)
|
|
return (i+1) * 3
|
|
end
|
|
end
|
|
0
|
|
end
|
|
|
|
def self.smallStraight( d1, d2, d3, d4, d5)
|
|
tallies = [0]*6
|
|
tallies[d1-1] += 1
|
|
tallies[d2-1] += 1
|
|
tallies[d3-1] += 1
|
|
tallies[d4-1] += 1
|
|
tallies[d5-1] += 1
|
|
(tallies[0] == 1 and
|
|
tallies[1] == 1 and
|
|
tallies[2] == 1 and
|
|
tallies[3] == 1 and
|
|
tallies[4] == 1) ? 15 : 0
|
|
end
|
|
|
|
def self.largeStraight( d1, d2, d3, d4, d5)
|
|
tallies = [0]*6
|
|
tallies[d1-1] += 1
|
|
tallies[d2-1] += 1
|
|
tallies[d3-1] += 1
|
|
tallies[d4-1] += 1
|
|
tallies[d5-1] += 1
|
|
if (tallies[1] == 1 and tallies[2] == 1 and tallies[3] == 1 and tallies[4] == 1 and tallies[5] == 1)
|
|
return 20
|
|
end
|
|
return 0
|
|
end
|
|
|
|
def self.fullHouse( d1, d2, d3, d4, d5)
|
|
tallies = []
|
|
_2 = false
|
|
i = 0
|
|
_2_at = 0
|
|
_3 = false
|
|
_3_at = 0
|
|
|
|
tallies = [0]*6
|
|
tallies[d1-1] += 1
|
|
tallies[d2-1] += 1
|
|
tallies[d3-1] += 1
|
|
tallies[d4-1] += 1
|
|
tallies[d5-1] += 1
|
|
|
|
for i in Array 0..5
|
|
if (tallies[i] == 2)
|
|
_2 = true
|
|
_2_at = i+1
|
|
end
|
|
end
|
|
|
|
for i in Array 0..5
|
|
if (tallies[i] == 3)
|
|
_3 = true
|
|
_3_at = i+1
|
|
end
|
|
end
|
|
|
|
if (_2 and _3)
|
|
return _2_at * 2 + _3_at * 3
|
|
else
|
|
return 0
|
|
end
|
|
end
|
|
end
|