diff --git a/2022/README.md b/2022/README.md index 46dd6d68d922f21ae06a403e52814dac0de40e43..79433ac8f452f090100bc726ac6304d7d1d8f7de 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 b33b4acfe7e5596cee9c1144bb688e53b107cb61..e7603d912f465fa25955fca4a5d27d26dfaca991 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; }