From 15c834055523ad2560184b9494ddda3312d17500 Mon Sep 17 00:00:00 2001
From: Christopher Bohn <bohn@unl.edu>
Date: Fri, 2 Dec 2022 08:06:43 -0600
Subject: [PATCH] Refactored Year 2022 Day 2

---
 2022/README.md                                |  5 ++++
 .../java/edu/unl/cse/bohn/year2022/Day2.java  | 23 ++++++++-----------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/2022/README.md b/2022/README.md
index e88fb8b..d35366e 100644
--- a/2022/README.md
+++ b/2022/README.md
@@ -39,6 +39,11 @@ The subproblems for both parts are
 
 Seems pretty straight-forward.
 
+### Refactoring opportunity
+
+Parts 1 & 2 differ in whether we determine the outcome based off of "my" hand, or whether we determine "my" hand based off of the outcome.
+Where we parameterized the commonality on Day 1, today we'll simply extract the commonality into a helper method.
+
 ## Day 3
 
 (coming soon)
diff --git a/2022/src/main/java/edu/unl/cse/bohn/year2022/Day2.java b/2022/src/main/java/edu/unl/cse/bohn/year2022/Day2.java
index 9646d89..ed06688 100644
--- a/2022/src/main/java/edu/unl/cse/bohn/year2022/Day2.java
+++ b/2022/src/main/java/edu/unl/cse/bohn/year2022/Day2.java
@@ -37,10 +37,7 @@ public class Day2 extends Puzzle {
         return totalScore;
     }
 
-    private long scoreOneRoundForPart1(String choices) {
-        long score;
-        Outcome outcome = Outcome.UNKNOWN;
-        //noinspection DuplicatedCode
+    private static Hand getOpponentHand(String choices) {
         Hand opponent = switch (choices.charAt(0)) {
             case 'A' -> Hand.ROCK;
             case 'B' -> Hand.PAPER;
@@ -50,6 +47,13 @@ public class Day2 extends Puzzle {
         if (opponent == Hand.UNKNOWN) {
             throw new IllegalStateException("Opponent's hand determined as \"UNKNOWN\". Choices: { " + choices + " }");
         }
+        return opponent;
+    }
+
+    private long scoreOneRoundForPart1(String choices) {
+        long score;
+        Outcome outcome = Outcome.UNKNOWN;
+        Hand opponent = getOpponentHand(choices);
         Hand me;
         switch (choices.charAt(2)) {
             case 'X' -> {
@@ -98,16 +102,7 @@ public class Day2 extends Puzzle {
     private long scoreOneRoundForPart2(String choices) {
         long score;
 //        Outcome outcome = Outcome.UNKNOWN;
-        //noinspection DuplicatedCode
-        Hand opponent = switch (choices.charAt(0)) {
-            case 'A' -> Hand.ROCK;
-            case 'B' -> Hand.PAPER;
-            case 'C' -> Hand.SCISSORS;
-            default -> Hand.UNKNOWN;
-        };
-        if (opponent == Hand.UNKNOWN) {
-            throw new IllegalStateException("Opponent's hand determined as \"UNKNOWN\". Choices: { " + choices + " }");
-        }
+        Hand opponent = getOpponentHand(choices);
         Hand me;
         switch (choices.charAt(2)) {
             case 'X' -> {
-- 
GitLab