diff --git a/src/main/java/io/takima/Yatzy.java b/src/main/java/io/takima/Yatzy.java index 0b594f00b56962aba16fd24904c762ef38c48169..d8b6f7960bc5e18a0a5cd800a7e8c2f1e499832d 100644 --- a/src/main/java/io/takima/Yatzy.java +++ b/src/main/java/io/takima/Yatzy.java @@ -66,6 +66,14 @@ public final class Yatzy { return pairs.get(0) + pairs.get(1); } + public static int threeOfAKind(Roll roll) { + return roll.countByDiceValueStream() + .filter(entry -> entry.getValue() >= 3) + .max(Map.Entry.comparingByKey()) + .map(entry -> entry.getKey() * 3) + .orElse(0); + } + public static int fourOfAKind(Roll roll) { return roll.countByDiceValueStream() .filter(entry -> entry.getValue() >= 4) @@ -74,22 +82,6 @@ public final class Yatzy { .orElse(0); } - public static int threeOfAKind(int d1, int d2, int d3, int d4, int d5) { - int[] counts; - counts = new int[6]; - counts[d1 - 1]++; - counts[d2 - 1]++; - counts[d3 - 1]++; - counts[d4 - 1]++; - counts[d5 - 1]++; - for (int i = 0; i < 6; i++) { - if (counts[i] >= 3) { - return (i + 1) * 3; - } - } - return 0; - } - public static int smallStraight(int d1, int d2, int d3, int d4, int d5) { int[] counts; counts = new int[6]; diff --git a/src/test/java/io/takima/YatzyTest.java b/src/test/java/io/takima/YatzyTest.java index 18c976255abebc9341e5fdbe800495056e8f3595..8c07f444a7c02bfcb5848eea7690145fdbc2d5f3 100644 --- a/src/test/java/io/takima/YatzyTest.java +++ b/src/test/java/io/takima/YatzyTest.java @@ -106,16 +106,16 @@ class YatzyTest { @Test void threeOfAKindShouldSumTheThreeDiceWithTheSameValue() { assertAll( - () -> assertEquals(9, Yatzy.threeOfAKind(3, 3, 3, 4, 5)), - () -> assertEquals(15, Yatzy.threeOfAKind(5, 3, 5, 4, 5)), - () -> assertEquals(9, Yatzy.threeOfAKind(3, 3, 3, 3, 5)), - () -> assertEquals(9, Yatzy.threeOfAKind(3, 3, 3, 3, 3)) + () -> assertEquals(9, Yatzy.threeOfAKind(roll(3, 3, 3, 4, 5))), + () -> assertEquals(15, Yatzy.threeOfAKind(roll(5, 3, 5, 4, 5))), + () -> assertEquals(9, Yatzy.threeOfAKind(roll(3, 3, 3, 3, 5))), + () -> assertEquals(9, Yatzy.threeOfAKind(roll(3, 3, 3, 3, 3))) ); } @Test void threeOfAKindShouldReturnZeroIfThereIsNoThreeDiceWithTheSameValue() { - assertEquals(0, Yatzy.threeOfAKind(3, 3, 4, 5, 6)); + assertEquals(0, Yatzy.threeOfAKind(roll(3, 3, 4, 5, 6))); } @Test