From bdbfeada28a12ca5633609d8d31d4f08614d2684 Mon Sep 17 00:00:00 2001 From: Thomas Fabre <tfabre@takima.fr> Date: Fri, 23 Jun 2023 14:21:37 +0200 Subject: [PATCH] Refactor fourOfAKind with Roll --- src/main/java/io/takima/Yatzy.java | 20 ++++++-------------- src/test/java/io/takima/YatzyTest.java | 11 ++++++----- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/takima/Yatzy.java b/src/main/java/io/takima/Yatzy.java index 54a0a21..0b594f0 100644 --- a/src/main/java/io/takima/Yatzy.java +++ b/src/main/java/io/takima/Yatzy.java @@ -66,20 +66,12 @@ public final class Yatzy { return pairs.get(0) + pairs.get(1); } - public static int fourOfAKind(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] >= 4) { - return (i + 1) * 4; - } - } - return 0; + public static int fourOfAKind(Roll roll) { + return roll.countByDiceValueStream() + .filter(entry -> entry.getValue() >= 4) + .max(Map.Entry.comparingByKey()) + .map(entry -> entry.getKey() * 4) + .orElse(0); } public static int threeOfAKind(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 b663f69..18c9762 100644 --- a/src/test/java/io/takima/YatzyTest.java +++ b/src/test/java/io/takima/YatzyTest.java @@ -108,7 +108,8 @@ class YatzyTest { 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, 5)), + () -> assertEquals(9, Yatzy.threeOfAKind(3, 3, 3, 3, 3)) ); } @@ -120,15 +121,15 @@ class YatzyTest { @Test void fourOfAKindShouldSumTheFourDiceWithTheSameValue() { assertAll( - () -> assertEquals(12, Yatzy.fourOfAKind(3, 3, 3, 3, 5)), - () -> assertEquals(20, Yatzy.fourOfAKind(5, 5, 5, 4, 5)), - () -> assertEquals(9, Yatzy.threeOfAKind(3, 3, 3, 3, 3)) + () -> assertEquals(12, Yatzy.fourOfAKind(roll(3, 3, 3, 3, 5))), + () -> assertEquals(20, Yatzy.fourOfAKind(roll(5, 5, 5, 4, 5))), + () -> assertEquals(12, Yatzy.fourOfAKind(roll(3, 3, 3, 3, 3))) ); } @Test void fourOfAKindShouldReturnZeroIfThereIsNoFourDiceWithTheSameValue() { - assertEquals(0, Yatzy.fourOfAKind(2, 2, 2, 5, 5)); + assertEquals(0, Yatzy.fourOfAKind(roll(2, 2, 2, 5, 5))); } @Test -- GitLab