diff --git a/src/main/java/io/takima/Yatzy.java b/src/main/java/io/takima/Yatzy.java index 20a86b0d074fd44cd92832266b2b68775c004138..54a0a2186838fa097f37c74617a2f6bc9ef22d6f 100644 --- a/src/main/java/io/takima/Yatzy.java +++ b/src/main/java/io/takima/Yatzy.java @@ -1,5 +1,6 @@ package io.takima; +import java.util.List; import java.util.Map; public final class Yatzy { @@ -54,26 +55,15 @@ public final class Yatzy { .orElse(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 { + public static int twoPair(Roll roll) { + List<Integer> pairs = roll.countByDiceValueStream() + .filter(entry -> entry.getValue() >= 2) + .map(entry -> entry.getKey() * 2) + .toList(); + if (pairs.size() != 2) { return 0; } + return pairs.get(0) + pairs.get(1); } public static int fourOfAKind(int d1, int d2, int d3, int d4, int d5) { diff --git a/src/test/java/io/takima/YatzyTest.java b/src/test/java/io/takima/YatzyTest.java index dd3857e8beabb9aa79705a1d8d92afa31829ff19..b663f692a4d1ccaad7e91c655252e19d51308a3d 100644 --- a/src/test/java/io/takima/YatzyTest.java +++ b/src/test/java/io/takima/YatzyTest.java @@ -93,14 +93,14 @@ class YatzyTest { @Test void twoPairShouldSumTheScoreOfAllDiceWhichMatchWithDistinctPair() { assertAll( - () -> assertEquals(16, Yatzy.twoPair(3, 3, 5, 4, 5)), - () -> assertEquals(16, Yatzy.twoPair(3, 3, 5, 5, 5)) + () -> assertEquals(16, Yatzy.twoPair(roll(3, 3, 5, 4, 5))), + () -> assertEquals(16, Yatzy.twoPair(roll(3, 3, 5, 5, 5))) ); } @Test void twoPairShouldMatchIfThereIsTwoDistinctPair() { - assertEquals(0, Yatzy.twoPair(3, 3, 3, 3, 1)); + assertEquals(0, Yatzy.twoPair(roll(3, 3, 3, 3, 1))); } @Test