mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-10-17 19:35:06 +00:00
New Refactoring Kata - Yahtzee - by Jon Jagger
This commit is contained in:
1 parent
32ce66e211
commit
4945165df2
7 files changed
+1157
No files matched your search
@@ -0,0 +1,238 @@
|
||||
public class Yahtzee {
|
||||
|
||||
public static int Chance(int d1, int d2, int d3, int d4, int d5)
|
||||
{
|
||||
int total = 0;
|
||||
total += d1;
|
||||
total += d2;
|
||||
total += d3;
|
||||
total += d4;
|
||||
total += d5;
|
||||
return total;
|
||||
}
|
||||
|
||||
public static int yahtzee(params int[] dice)
|
||||
{
|
||||
int[] counts = new int[6];
|
||||
foreach (int die in dice)
|
||||
counts[die-1]++;
|
||||
for (int i = 0; i != 6; i++)
|
||||
if (counts[i] == 5)
|
||||
return 50;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int Ones(int d1, int d2, int d3, int d4, int d5) {
|
||||
int sum = 0;
|
||||
if (d1 == 1) sum++;
|
||||
if (d2 == 1) sum++;
|
||||
if (d3 == 1) sum++;
|
||||
if (d4 == 1) sum++;
|
||||
if (d5 == 1)
|
||||
sum++;
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
public static int Twos(int d1, int d2, int d3, int d4, int d5) {
|
||||
int sum = 0;
|
||||
if (d1 == 2) sum += 2;
|
||||
if (d2 == 2) sum += 2;
|
||||
if (d3 == 2) sum += 2;
|
||||
if (d4 == 2) sum += 2;
|
||||
if (d5 == 2) sum += 2;
|
||||
return sum;
|
||||
}
|
||||
|
||||
public static int Threes(int d1, int d2, int d3, int d4, int d5) {
|
||||
int s;
|
||||
s = 0;
|
||||
if (d1 == 3) s += 3;
|
||||
if (d2 == 3) s += 3;
|
||||
if (d3 == 3) s += 3;
|
||||
if (d4 == 3) s += 3;
|
||||
if (d5 == 3) s += 3;
|
||||
return s;
|
||||
}
|
||||
|
||||
protected int[] dice;
|
||||
public Yahtzee(int d1, int d2, int d3, int d4, int _5)
|
||||
{
|
||||
dice = new int[5];
|
||||
dice[0] = d1;
|
||||
dice[1] = d2;
|
||||
dice[2] = d3;
|
||||
dice[3] = d4;
|
||||
dice[4] = _5;
|
||||
}
|
||||
|
||||
public int Fours()
|
||||
{
|
||||
int sum;
|
||||
sum = 0;
|
||||
for (int at = 0; at != 5; at++) {
|
||||
if (dice[at] == 4) {
|
||||
sum += 4;
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
public int Fives()
|
||||
{
|
||||
int s = 0;
|
||||
int i;
|
||||
for (i = 0; i < dice.Length; i++)
|
||||
if (dice[i] == 5)
|
||||
s = s + 5;
|
||||
return s;
|
||||
}
|
||||
|
||||
public int sixes()
|
||||
{
|
||||
int sum = 0;
|
||||
for (int at = 0; at < dice.Length; at++)
|
||||
if (dice[at] == 6)
|
||||
sum = sum + 6;
|
||||
return sum;
|
||||
}
|
||||
|
||||
public static int ScorePair(int d1, int d2, int d3, int d4, int d5)
|
||||
{
|
||||
int[] counts = new int[6];
|
||||
counts[d1-1]++;
|
||||
counts[d2-1]++;
|
||||
counts[d3-1]++;
|
||||
counts[d4-1]++;
|
||||
counts[d5-1]++;
|
||||
int at;
|
||||
for (at = 0; at != 6; at++)
|
||||
if (counts[6-at-1] == 2)
|
||||
return (6-at)*2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int TwoPair(int d1, int d2, int d3, int d4, int d5)
|
||||
{
|
||||
int[] counts = new int[6];
|
||||
counts[d1-1]++;
|
||||
counts[d2-1]++;
|
||||
counts[d3-1]++;
|
||||
counts[d4-1]++;
|
||||
counts[d5-1]++;
|
||||
int n = 0;
|
||||
int score = 0;
|
||||
for (int i = 0; i < 6; i += 1)
|
||||
if (counts[6-i-1] == 2) {
|
||||
n++;
|
||||
score += (6-i);
|
||||
}
|
||||
if (n == 2)
|
||||
return score * 2;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int FourOfAKind(int _1, int _2, int d3, int d4, int d5)
|
||||
{
|
||||
int[] tallies;
|
||||
tallies = new int[6];
|
||||
tallies[_1-1]++;
|
||||
tallies[_2-1]++;
|
||||
tallies[d3-1]++;
|
||||
tallies[d4-1]++;
|
||||
tallies[d5-1]++;
|
||||
for (int i = 0; i < 6; i++)
|
||||
if (tallies[i] == 4)
|
||||
return (i+1) * 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int ThreeOfAKind(int d1, int d2, int d3, int d4, int d5)
|
||||
{
|
||||
int[] t;
|
||||
t = new int[6];
|
||||
t[d1-1]++;
|
||||
t[d2-1]++;
|
||||
t[d3-1]++;
|
||||
t[d4-1]++;
|
||||
t[d5-1]++;
|
||||
for (int i = 0; i < 6; i++)
|
||||
if (t[i] == 3)
|
||||
return (i+1) * 3;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int SmallStraight(int d1, int d2, int d3, int d4, int d5)
|
||||
{
|
||||
int[] tallies;
|
||||
tallies = new int[6];
|
||||
tallies[d1-1] += 1;
|
||||
tallies[d2-1] += 1;
|
||||
tallies[d3-1] += 1;
|
||||
tallies[d4-1] += 1;
|
||||
tallies[d5-1] += 1;
|
||||
if (tallies[0] == 1 &&
|
||||
tallies[1] == 1 &&
|
||||
tallies[2] == 1 &&
|
||||
tallies[3] == 1 &&
|
||||
tallies[4] == 1)
|
||||
return 15;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int LargeStraight(int d1, int d2, int d3, int d4, int d5)
|
||||
{
|
||||
int[] tallies;
|
||||
tallies = new int[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 &&
|
||||
tallies[2] == 1 &&
|
||||
tallies[3] == 1 &&
|
||||
tallies[4] == 1
|
||||
&& tallies[5] == 1)
|
||||
return 20;
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int FullHouse(int d1, int d2, int d3, int d4, int d5)
|
||||
{
|
||||
int[] tallies;
|
||||
bool _2 = false;
|
||||
int i;
|
||||
int _2_at = 0;
|
||||
bool _3 = false;
|
||||
int _3_at = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
tallies = new int[6];
|
||||
tallies[d1-1] += 1;
|
||||
tallies[d2-1] += 1;
|
||||
tallies[d3-1] += 1;
|
||||
tallies[d4-1] += 1;
|
||||
tallies[d5-1] += 1;
|
||||
|
||||
for (i = 0; i != 6; i += 1)
|
||||
if (tallies[i] == 2) {
|
||||
_2 = true;
|
||||
_2_at = i+1;
|
||||
}
|
||||
|
||||
for (i = 0; i != 6; i += 1)
|
||||
if (tallies[i] == 3) {
|
||||
_3 = true;
|
||||
_3_at = i+1;
|
||||
}
|
||||
|
||||
if (_2 && _3)
|
||||
return _2_at * 2 + _3_at * 3;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
using NUnit.Framework;
|
||||
|
||||
[TestFixture]
|
||||
public class UntitledTest
|
||||
{
|
||||
[Test]
|
||||
public void Chance_scores_sum_of_all_dice()
|
||||
{
|
||||
int expected = 15;
|
||||
int actual = Yahtzee.Chance(2,3,4,5,1);
|
||||
Assert.AreEqual(expected, actual);
|
||||
Assert.AreEqual(16, Yahtzee.Chance(3,3,4,5,1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Yahtzee_scores_50()
|
||||
{
|
||||
int expected = 50;
|
||||
int actual = Yahtzee.yahtzee(4,4,4,4,4);
|
||||
Assert.AreEqual(expected, actual);
|
||||
Assert.AreEqual(50, Yahtzee.yahtzee(6,6,6,6,6));
|
||||
Assert.AreEqual(0, Yahtzee.yahtzee(6,6,6,6,3));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Test_1s() {
|
||||
Assert.IsTrue(Yahtzee.Ones(1,2,3,4,5) == 1);
|
||||
Assert.AreEqual(2, Yahtzee.Ones(1,2,1,4,5));
|
||||
Assert.AreEqual(0, Yahtzee.Ones(6,2,2,4,5));
|
||||
Assert.AreEqual(4, Yahtzee.Ones(1,2,1,1,1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_2s()
|
||||
{
|
||||
Assert.AreEqual(4, Yahtzee.Twos(1,2,3,2,6));
|
||||
Assert.AreEqual(10, Yahtzee.Twos(2,2,2,2,2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void test_threes()
|
||||
{
|
||||
Assert.AreEqual(6, Yahtzee.Threes(1,2,3,2,3));
|
||||
Assert.AreEqual(12, Yahtzee.Threes(2,3,3,3,3));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void fours_test()
|
||||
{
|
||||
Assert.AreEqual(12, new Yahtzee(4,4,4,5,5).Fours());
|
||||
Assert.AreEqual(8, new Yahtzee(4,4,5,5,5).Fours());
|
||||
Assert.AreEqual(4, new Yahtzee(4,5,5,5,5).Fours());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void fives() {
|
||||
Assert.AreEqual(10, new Yahtzee(4,4,4,5,5).Fives());
|
||||
Assert.AreEqual(15, new Yahtzee(4,4,5,5,5).Fives());
|
||||
Assert.AreEqual(20, new Yahtzee(4,5,5,5,5).Fives());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void sixes_test()
|
||||
{
|
||||
Assert.AreEqual(0, new Yahtzee(4,4,4,5,5).sixes());
|
||||
Assert.AreEqual(6, new Yahtzee(4,4,6,5,5).sixes());
|
||||
Assert.AreEqual(18, new Yahtzee(6,5,6,6,5).sixes());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void one_pair()
|
||||
{
|
||||
Assert.AreEqual(6, Yahtzee.ScorePair(3,4,3,5,6));
|
||||
Assert.AreEqual(10, Yahtzee.ScorePair(5,3,3,3,5));
|
||||
Assert.AreEqual(12, Yahtzee.ScorePair(5,3,6,6,5));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void two_Pair()
|
||||
{
|
||||
Assert.AreEqual(16, Yahtzee.TwoPair(3,3,5,4,5));
|
||||
Assert.AreEqual(0, Yahtzee.TwoPair(3,3,5,5,5));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void three_of_a_kind()
|
||||
{
|
||||
Assert.AreEqual(9, Yahtzee.ThreeOfAKind(3,3,3,4,5));
|
||||
Assert.AreEqual(15, Yahtzee.ThreeOfAKind(5,3,5,4,5));
|
||||
Assert.AreEqual(0, Yahtzee.ThreeOfAKind(3,3,3,3,5));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void four_of_a_knd()
|
||||
{
|
||||
Assert.AreEqual(12, Yahtzee.FourOfAKind(3,3,3,3,5));
|
||||
Assert.AreEqual(20, Yahtzee.FourOfAKind(5,5,5,4,5));
|
||||
Assert.AreEqual(0, Yahtzee.FourOfAKind(3,3,3,3,3));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void smallStraight()
|
||||
{
|
||||
Assert.AreEqual(15, Yahtzee.SmallStraight(1,2,3,4,5));
|
||||
Assert.AreEqual(15, Yahtzee.SmallStraight(2,3,4,5,1));
|
||||
Assert.AreEqual(0, Yahtzee.SmallStraight(1,2,2,4,5));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void largeStraight()
|
||||
{
|
||||
Assert.AreEqual(20, Yahtzee.LargeStraight(6,2,3,4,5));
|
||||
Assert.AreEqual(20, Yahtzee.LargeStraight(2,3,4,5,6));
|
||||
Assert.AreEqual(0, Yahtzee.LargeStraight(1,2,2,4,5));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void fullHouse()
|
||||
{
|
||||
Assert.AreEqual(18, Yahtzee.FullHouse(6,2,2,2,6));
|
||||
Assert.AreEqual(0, Yahtzee.FullHouse(2,3,4,5,6));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user