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