From 1d951a24051f3ef7b3689b16cd81181a0862263d Mon Sep 17 00:00:00 2001
From: Thomas Fabre <tfabre@takima.fr>
Date: Fri, 23 Jun 2023 14:28:45 +0200
Subject: [PATCH] Refactor smallStraight with Roll

---
 src/main/java/io/takima/Yatzy.java     | 26 ++++++++++----------------
 src/test/java/io/takima/YatzyTest.java |  8 ++++----
 2 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/src/main/java/io/takima/Yatzy.java b/src/main/java/io/takima/Yatzy.java
index d8b6f79..c75cead 100644
--- a/src/main/java/io/takima/Yatzy.java
+++ b/src/main/java/io/takima/Yatzy.java
@@ -2,8 +2,11 @@ package io.takima;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.IntStream;
 
 public final class Yatzy {
+    private static final List<Integer> SMALL_STRAIGHT = IntStream.range(1, 6).boxed().toList();
+
     private Yatzy() {
         // This his a utility class which only implements static methods
     }
@@ -20,13 +23,14 @@ public final class Yatzy {
         return 0;
     }
 
-    private static int sumDiceThatMatchWithValue(Roll roll, int value) {
-        return roll.toStream().filter(dice -> dice == value).sum();
-    }
     public static int ones(Roll roll) {
         return sumDiceThatMatchWithValue(roll, 1);
     }
 
+    private static int sumDiceThatMatchWithValue(Roll roll, int value) {
+        return roll.toStream().filter(dice -> dice == value).sum();
+    }
+
     public static int twos(Roll roll) {
         return sumDiceThatMatchWithValue(roll, 2);
     }
@@ -82,19 +86,9 @@ public final class Yatzy {
             .orElse(0);
     }
 
-    public static int smallStraight(int d1, int d2, int d3, int d4, int d5) {
-        int[] counts;
-        counts = new int[6];
-        counts[d1 - 1] += 1;
-        counts[d2 - 1] += 1;
-        counts[d3 - 1] += 1;
-        counts[d4 - 1] += 1;
-        counts[d5 - 1] += 1;
-        if (counts[0] == 1 &&
-            counts[1] == 1 &&
-            counts[2] == 1 &&
-            counts[3] == 1 &&
-            counts[4] == 1) {
+    public static int smallStraight(Roll roll) {
+        List<Integer> sortedRoll = roll.toStream().sorted().boxed().toList();
+        if (sortedRoll.equals(SMALL_STRAIGHT)) {
             return 15;
         }
         return 0;
diff --git a/src/test/java/io/takima/YatzyTest.java b/src/test/java/io/takima/YatzyTest.java
index 8c07f44..2a741e1 100644
--- a/src/test/java/io/takima/YatzyTest.java
+++ b/src/test/java/io/takima/YatzyTest.java
@@ -135,16 +135,16 @@ class YatzyTest {
     @Test
     void smallStraightShouldReturnFifteenIfDiceAreFromOneToFive() {
         assertAll(
-            () -> assertEquals(15, Yatzy.smallStraight(1, 2, 3, 4, 5)),
-            () -> assertEquals(15, Yatzy.smallStraight(2, 3, 4, 5, 1))
+            () -> assertEquals(15, Yatzy.smallStraight(roll(1, 2, 3, 4, 5))),
+            () -> assertEquals(15, Yatzy.smallStraight(roll(2, 3, 4, 5, 1)))
         );
     }
 
     @Test
     void smallStraightShouldReturnZeroIfDicesAreNotFromOneToFive() {
         assertAll(
-            () -> assertEquals(0, Yatzy.smallStraight(1, 2, 2, 4, 5)),
-            () -> assertEquals(0, Yatzy.smallStraight(2, 3, 4, 5, 6))
+            () -> assertEquals(0, Yatzy.smallStraight(roll(1, 2, 2, 4, 5))),
+            () -> assertEquals(0, Yatzy.smallStraight(roll(2, 3, 4, 5, 6)))
         );
     }
 
-- 
GitLab