New Refactoring Kata - Yahtzee - by Jon Jagger

This commit is contained in:
Emily Bache committed 2012-06-14 11:30:21 +02:00
1 parent 32ce66e211
commit 4945165df2
7 files changed
+1157

No files matched your search

+241
View File
@@ -0,0 +1,241 @@
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(int... dice)
{
int[] counts = new int[6];
for (int die : 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 score_pair(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 two_pair(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 four_of_a_kind(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 three_of_a_kind(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;
boolean _2 = false;
int i;
int _2_at = 0;
boolean _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;
}
}
+110
View File
@@ -0,0 +1,110 @@
import org.junit.*;
import static org.junit.Assert.*;
public class YahtzeeTest {
@Test
public void chance_scores_sum_of_all_dice() {
int expected = 15;
int actual = Yahtzee.chance(2,3,4,5,1);
assertEquals(expected, actual);
assertEquals(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);
assertEquals(expected, actual);
assertEquals(50, Yahtzee.yahtzee(6,6,6,6,6));
assertEquals(0, Yahtzee.yahtzee(6,6,6,6,3));
}
@Test public void test_1s() {
assertTrue(Yahtzee.ones(1,2,3,4,5) == 1);
assertEquals(2, Yahtzee.ones(1,2,1,4,5));
assertEquals(0, Yahtzee.ones(6,2,2,4,5));
assertEquals(4, Yahtzee.ones(1,2,1,1,1));
}
@Test
public void test_2s() {
assertEquals(4, Yahtzee.twos(1,2,3,2,6));
assertEquals(10, Yahtzee.twos(2,2,2,2,2));
}
@Test
public void test_threes() {
assertEquals(6, Yahtzee.threes(1,2,3,2,3));
assertEquals(12, Yahtzee.threes(2,3,3,3,3));
}
@Test
public void fours_test()
{
assertEquals(12, new Yahtzee(4,4,4,5,5).fours());
assertEquals(8, new Yahtzee(4,4,5,5,5).fours());
assertEquals(4, new Yahtzee(4,5,5,5,5).fours());
}
@Test
public void fives() {
assertEquals(10, new Yahtzee(4,4,4,5,5).fives());
assertEquals(15, new Yahtzee(4,4,5,5,5).fives());
assertEquals(20, new Yahtzee(4,5,5,5,5).fives());
}
@Test
public void sixes_test() {
assertEquals(0, new Yahtzee(4,4,4,5,5).sixes());
assertEquals(6, new Yahtzee(4,4,6,5,5).sixes());
assertEquals(18, new Yahtzee(6,5,6,6,5).sixes());
}
@Test
public void one_pair() {
assertEquals(6, Yahtzee.score_pair(3,4,3,5,6));
assertEquals(10, Yahtzee.score_pair(5,3,3,3,5));
assertEquals(12, Yahtzee.score_pair(5,3,6,6,5));
}
@Test
public void two_Pair() {
assertEquals(16, Yahtzee.two_pair(3,3,5,4,5));
assertEquals(0, Yahtzee.two_pair(3,3,5,5,5));
}
@Test
public void three_of_a_kind()
{
assertEquals(9, Yahtzee.three_of_a_kind(3,3,3,4,5));
assertEquals(15, Yahtzee.three_of_a_kind(5,3,5,4,5));
assertEquals(0, Yahtzee.three_of_a_kind(3,3,3,3,5));
}
@Test
public void four_of_a_knd() {
assertEquals(12, Yahtzee.four_of_a_kind(3,3,3,3,5));
assertEquals(20, Yahtzee.four_of_a_kind(5,5,5,4,5));
assertEquals(0, Yahtzee.three_of_a_kind(3,3,3,3,3));
}
@Test
public void smallStraight() {
assertEquals(15, Yahtzee.smallStraight(1,2,3,4,5));
assertEquals(15, Yahtzee.smallStraight(2,3,4,5,1));
assertEquals(0, Yahtzee.smallStraight(1,2,2,4,5));
}
@Test
public void largeStraight() {
assertEquals(20, Yahtzee.largeStraight(6,2,3,4,5));
assertEquals(20, Yahtzee.largeStraight(2,3,4,5,6));
assertEquals(0, Yahtzee.largeStraight(1,2,2,4,5));
}
@Test
public void fullHouse() {
assertEquals(18, Yahtzee.fullHouse(6,2,2,2,6));
assertEquals(0, Yahtzee.fullHouse(2,3,4,5,6));
}
}