diff --git a/src/main/java/io/takima/Yatzy.java b/src/main/java/io/takima/Yatzy.java index 6150c2f13fb5f252d38b69af382881bc09e02cd1..00c52d143eb34ce8ad9ff06c918b064a9d6d967d 100644 --- a/src/main/java/io/takima/Yatzy.java +++ b/src/main/java/io/takima/Yatzy.java @@ -103,35 +103,14 @@ public final class Yatzy { return 0; } - public static int fullHouse(int d1, int d2, int d3, int d4, int d5) { - boolean hasPair = false; - int pairValue = 0; - boolean hasTriplet = false; - int tripletValue = 0; - - - int[] counts = new int[6]; - counts[d1 - 1] += 1; - counts[d2 - 1] += 1; - counts[d3 - 1] += 1; - counts[d4 - 1] += 1; - counts[d5 - 1] += 1; - - for (int i = 0; i != 6; i += 1) - if (counts[i] == 2) { - hasPair = true; - pairValue = i + 1; - } - - for (int i = 0; i != 6; i += 1) - if (counts[i] == 3) { - hasTriplet = true; - tripletValue = i + 1; - } - - if (hasPair && hasTriplet) - return pairValue * 2 + tripletValue * 3; - else + public static int fullHouse(Roll roll) { + List<Integer> fullHouseSearch = roll.countByDiceValueStream() + .filter(entry -> entry.getValue() == 2 || entry.getValue() == 3) + .map(entry -> entry.getKey() * entry.getValue().intValue()) + .toList(); + if (fullHouseSearch.size() != 2) { return 0; + } + return fullHouseSearch.get(0) + fullHouseSearch.get(1); } } diff --git a/src/test/java/io/takima/YatzyTest.java b/src/test/java/io/takima/YatzyTest.java index 45b0ff70aad72846431351969dc1dd923de6c81c..da9214f60fd094d62cb2011169b789d3ec4ed009 100644 --- a/src/test/java/io/takima/YatzyTest.java +++ b/src/test/java/io/takima/YatzyTest.java @@ -166,11 +166,11 @@ class YatzyTest { @Test void fullHouseShouldSumDicesIfThereAreATripletAndAPair() { - assertEquals(18, Yatzy.fullHouse(6, 2, 2, 2, 6)); + assertEquals(18, Yatzy.fullHouse(roll(6, 2, 2, 2, 6))); } @Test void fullHouseShouldReturnZeroIfThereIsNotTripletAndPair() { - assertEquals(0, Yatzy.fullHouse(2, 3, 4, 5, 6)); + assertEquals(0, Yatzy.fullHouse(roll(2, 3, 4, 5, 6))); } }