diff --git a/aoc2023/src/main/java/io/github/zebalu/aoc2023/days/Day17.java b/aoc2023/src/main/java/io/github/zebalu/aoc2023/days/Day17.java index ff68b70..f2439d3 100644 --- a/aoc2023/src/main/java/io/github/zebalu/aoc2023/days/Day17.java +++ b/aoc2023/src/main/java/io/github/zebalu/aoc2023/days/Day17.java @@ -7,17 +7,16 @@ public class Day17 { public static void main(String[] args) { List maze = readInput().lines().toList(); - part1(maze); - part2(maze); + System.out.println(part1(maze)); + System.out.println(part2(maze)); } - private static void part1(List maze) { - System.out.println(minHeatLoss(maze, 3, (a, b) -> true)); + private static int part1(List maze) { + return minHeatLoss(maze, 3, (a, b) -> true); } - private static void part2(List maze) { - System.out - .println(minHeatLoss(maze, 10, (c, s) -> 4 <= s.straightLength() || s.pos().directionOf(c) == s.dir())); + private static int part2(List maze) { + return minHeatLoss(maze, 10, (c, s) -> 4 <= s.straightLength() || s.pos().directionOf(c) == s.dir()); } private static int minHeatLoss(List maze, int maxLength, BiPredicate nextFilter) { @@ -26,7 +25,7 @@ private static int minHeatLoss(List maze, int maxLength, BiPredicate isValidCood = c -> 0 <= c.x() && 0 <= c.y() && c.x < width && c.y < height; Predicate isValidState = s -> isValidCood.test(s.pos()) && s.straightLength() <= maxLength; Coord target = new Coord(width - 1, height - 1); - Map psdCost = new HashMap<>(); + Map bestCost = new HashMap<>(); Queue queue = new PriorityQueue<>(); queue.add(new State(new Coord(0, 0), 0, 0, Direction.EAST)); while (!queue.isEmpty()) { @@ -40,9 +39,9 @@ private static int minHeatLoss(List maze, int maxLength, BiPredicate { - private static final Comparator COMPARATOR = Comparator.comparingLong(State::heatLoss) - .thenComparingInt(State::straightLength); + private static final Comparator COMPARATOR = Comparator.comparingLong(State::heatLoss).thenComparingInt(State::straightLength); @Override public int compareTo(State o) { @@ -110,12 +108,10 @@ int nextStraight(Coord c) { } return 1; } - - } - - private record PosStepDir(Coord pos, int steps, Direction dir) { - static PosStepDir of(State state) { - return new PosStepDir(state.pos, state.straightLength, state.dir); + + long toKey() { + return 0L+pos.x()*1_000_000L+pos.y()*1_000L+straightLength*10L+dir.ordinal(); } + } } diff --git a/aoc2023/src/main/java/io/github/zebalu/aoc2023/main/App.java b/aoc2023/src/main/java/io/github/zebalu/aoc2023/main/App.java index ce7491d..54d2f80 100644 --- a/aoc2023/src/main/java/io/github/zebalu/aoc2023/main/App.java +++ b/aoc2023/src/main/java/io/github/zebalu/aoc2023/main/App.java @@ -28,6 +28,7 @@ import io.github.zebalu.aoc2023.days.Day14; import io.github.zebalu.aoc2023.days.Day15; import io.github.zebalu.aoc2023.days.Day16; +import io.github.zebalu.aoc2023.days.Day17; public class App { @@ -59,6 +60,7 @@ public static void main(String[] args) { exec(new DisplayData(14, "Parabolic Reflector Dish", Day14::main)); exec(new DisplayData(15, "Lens Library", Day15::main)); exec(new DisplayData(16, "The Floor Will Be Lava", Day16::main)); + exec(new DisplayData(17, "Clumsy Crucible", Day17::main)); Instant end = Instant.now(); System.out.println("so far:\t"+Duration.between(start, end).toMillis()+" ms..."); }