Skip to content

Commit 9233c8a

Browse files
committed
small optimization
1 parent 820f629 commit 9233c8a

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

src/main/java/com/codefork/aoc2024/day21/ShipLock.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ public static int getNumericPortion(String str) {
2424
}
2525

2626
public static long calculateSumOfComplexities(Stream<String> data, int numRobots) {
27+
record WithLength(PressSequence seq, long length) {
28+
}
29+
2730
// create our layered navigators
2831
var navigators = new ArrayList<KeypadNavigator>();
2932
navigators.add(new DoorKeypadNavigator());
@@ -45,15 +48,25 @@ public static long calculateSumOfComplexities(Stream<String> data, int numRobots
4548
newPressSeqSet.addAll(possiblePresses);
4649
}
4750

48-
var shortestLength = newPressSeqSet.stream().map(PressSequence::length).mapToLong(i-> i).min().orElseThrow();
51+
// calculate lengths just once, since it's a slightly expensive operation
52+
var withLengths = newPressSeqSet.stream()
53+
.map(ps -> new WithLength(ps, ps.length()))
54+
.toList();
55+
56+
var shortestLength = withLengths.stream()
57+
.mapToLong(WithLength::length)
58+
.min()
59+
.orElseThrow();
4960

5061
// we don't need to carry over every result to the next iteration, only the shortest ones.
5162
// this shortcut is necessary to get the solution to finish at all
52-
var truncated = newPressSeqSet.stream().filter(set -> set.length() == shortestLength).toList();
63+
var truncated = withLengths.stream()
64+
.filter(item -> item.length() == shortestLength)
65+
.map(WithLength::seq)
66+
.toList();
5367
pressSeqs = truncated;
5468
}
55-
//System.out.println("found " + pressSeqSet.size() + " possible presses for last navigator");
56-
var shortestLength = pressSeqs.stream().map(PressSequence::length).mapToLong(i -> i).min().orElseThrow();
69+
var shortestLength = pressSeqs.getFirst().length();
5770
//System.out.println("shortest press found is "+ shortestLength + " long");
5871
var result = shortestLength * getNumericPortion(seq);
5972
return result;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy