From 687effee1dbe081197b05d2f30cfce970986aaaa Mon Sep 17 00:00:00 2001
From: Christopher Bohn <bohn@unl.edu>
Date: Tue, 6 Dec 2022 08:17:26 -0600
Subject: [PATCH] Completed Year 2022 Day 6

---
 2022/README.md                                        |  8 ++++++++
 .../src/main/java/edu/unl/cse/bohn/year2022/Day6.java | 11 +++++------
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/2022/README.md b/2022/README.md
index 46dd6d6..79433ac 100644
--- a/2022/README.md
+++ b/2022/README.md
@@ -173,6 +173,14 @@ The subproblems are
 - Count the number of characters before the next character after that sequence
   - *i.e.*, count the number of characters before that sequence plus the four characters in that sequence
 
+### Part 2
+
+The difference here is the length of the character sequence with unique characters.
+
+### Refactoring opportunity
+
+This is straight-forward -- I just need to parameterize the helper method that looks for the unique-character sequence.
+
 ## Day 7
 
 (coming soon)
diff --git a/2022/src/main/java/edu/unl/cse/bohn/year2022/Day6.java b/2022/src/main/java/edu/unl/cse/bohn/year2022/Day6.java
index b33b4ac..e7603d9 100644
--- a/2022/src/main/java/edu/unl/cse/bohn/year2022/Day6.java
+++ b/2022/src/main/java/edu/unl/cse/bohn/year2022/Day6.java
@@ -18,33 +18,32 @@ public class Day6 extends Puzzle {
 
     @Override
     public long computePart1(List<String> data) {
-        return getStartOfPacketIndex(data.get(0));
+        return getStartOfPacketIndex(data.get(0), 4);
     }
 
     @Override
     public long computePart2(List<String> data) {
-        return 0;
+        //noinspection MagicNumber
+        return getStartOfPacketIndex(data.get(0), 14);
     }
 
-    private long getStartOfPacketIndex(String dataStream) {
+    private long getStartOfPacketIndex(String dataStream, int lengthOfMarker) {
         LinkedList<Character> markerCandidate = new LinkedList<>();
         int nextIndex = 0;
         int indexOfDuplicate = Integer.MIN_VALUE;
         boolean foundMarker = false;
         while (!foundMarker) {
             char c = dataStream.charAt(nextIndex++);
-//            System.out.print(markerCandidate + " + " + c + " = ");
             int indexOfPossibleDuplicate = markerCandidate.lastIndexOf(c);
             indexOfDuplicate = Integer.max(indexOfDuplicate, indexOfPossibleDuplicate);
             markerCandidate.add(c);
-            if (nextIndex > 4) {
+            if (nextIndex > lengthOfMarker) {
                 markerCandidate.remove();
                 indexOfDuplicate--;
                 if (indexOfDuplicate < 0) {
                     foundMarker = true;
                 }
             }
-//            System.out.println(markerCandidate);
         }
         return nextIndex;
     }
-- 
GitLab