diff --git a/adventofcode/README.md b/adventofcode/README.md index e906701f..1b9a9007 100644 --- a/adventofcode/README.md +++ b/adventofcode/README.md @@ -1430,7 +1430,7 @@ [20232402tests]: src/test/java/org/ck/adventofcode/year2023/Day24Test.java [20232501tests]: src/test/java/org/ck/adventofcode/year2023/Day25Test.java -# 2024 (24/49) +# 2024 (26/49) | # | Name | Solution | Test | |---------:|---------------------------------------------------|:------------------------------------:|:---------------------------------:| @@ -1458,8 +1458,8 @@ | 20241102 | [Day 11: Plutonian Pebbles - Part 2][20241102] | ✅[💾][20241102solution] | ✅[💾][20241102tests] | | 20241201 | [Day 12: Garden Groups][20241201] | ✅[💾][20241201solution] | ✅[💾][20241201tests] | | 20241202 | [Day 12: Garden Groups - Part 2][20241202] | ✅[💾][20241202solution] | ✅[💾][20241202tests] | -| 20241301 | [Day 13: ?][20241301] | [💾][20241301solution] | [💾][20241301tests] | -| 20241302 | [Day 13: ? - Part 2][20241302] | [💾][20241302solution] | [💾][20241302tests] | +| 20241301 | [Day 13: Claw Contraption][20241301] | ✅[💾][20241301solution] | ✅[💾][20241301tests] | +| 20241302 | [Day 13: Claw Contraption - Part 2][20241302] | ✅[💾][20241302solution] | ✅[💾][20241302tests] | | 20241401 | [Day 14: ?][20241401] | [💾][20241401solution] | [💾][20241401tests] | | 20241402 | [Day 14: ? - Part 2][20241402] | [💾][20241402solution] | [💾][20241402tests] | | 20241501 | [Day 15: ?][20241501] | [💾][20241501solution] | [💾][20241501tests] | diff --git a/adventofcode/src/main/java/org/ck/adventofcode/year2024/Day13.java b/adventofcode/src/main/java/org/ck/adventofcode/year2024/Day13.java index 98beb433..03b81678 100644 --- a/adventofcode/src/main/java/org/ck/adventofcode/year2024/Day13.java +++ b/adventofcode/src/main/java/org/ck/adventofcode/year2024/Day13.java @@ -1,34 +1,98 @@ package org.ck.adventofcode.year2024; -import java.util.Scanner; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.ck.adventofcode.util.AOCSolution; import org.ck.codechallengelib.annotation.Solution; @Solution( id = 20241301, - name = "Day 13: ?", + name = "Day 13: Claw Contraption", url = "https://adventofcode.com/2024/day/13", - category = "2024", - solved = false) + category = "2024") @Solution( id = 20241302, - name = "Day 13: ? - Part 2", + name = "Day 13: Claw Contraption - Part 2", url = "https://adventofcode.com/2024/day/13#part2", - category = "2024", - solved = false) + category = "2024") public class Day13 extends AOCSolution { + private static final Pattern BUTTON_PATTERN = + Pattern.compile("Button [AB]: X\\+(?\\d+), Y\\+(?\\d+)"); + private static final Pattern PRICE_PATTERN = + Pattern.compile("Prize: X=(?\\d+), Y=(?\\d+)"); @Override protected void runPartOne(final Scanner in) { - run(in); + run(in, 0); } @Override protected void runPartTwo(final Scanner in) { - run(in); + run(in, 10000000000000L); } - private void run(final Scanner in) { - print("Whoopsie"); + private void run(final Scanner in, final long coordinateOffset) { + List machines = new ArrayList<>(); + + while (in.hasNextLine()) { + final Button aButton = getButton(in.nextLine(), 3); + final Button bButton = getButton(in.nextLine(), 1); + final Coordinate priceLocation = getPriceLocation(in.nextLine(), coordinateOffset); + if (in.hasNextLine()) { + in.nextLine(); + } + + machines.add(new Machine(aButton, bButton, priceLocation)); + } + + print(machines.stream().mapToLong(this::getMinCoins2).sum()); } + + private long getMinCoins2(Machine machine) { + final long pX = machine.priceLocation().x(); + final long pY = machine.priceLocation().y(); + final long aX = machine.a().movementAmount().x(); + final long aY = machine.a().movementAmount().y(); + final long bX = machine.b().movementAmount().x(); + final long bY = machine.b().movementAmount().y(); + + final long a = (pX * bY - bX * pY) / (aX * bY - bX * aY); + final long b = (pX - a * aX) / bX; + + if (a * aX + b * bX == pX && a * aY + b * bY == pY) { + return a * machine.a().coins() + b * machine.b().coins(); + } + + return 0; + } + + private Coordinate getPriceLocation(final String line, final long coordinateOffset) { + final Matcher matcher = PRICE_PATTERN.matcher(line); + if (matcher.find()) { + return new Coordinate( + Long.parseLong(matcher.group("xPosition")) + coordinateOffset, + Long.parseLong(matcher.group("yPosition")) + coordinateOffset); + } + + throw new IllegalArgumentException("Invalid price location: " + line); + } + + private Button getButton(final String line, final long coins) { + final Matcher matcher = BUTTON_PATTERN.matcher(line); + if (matcher.find()) { + return new Button( + new Coordinate( + Long.parseLong(matcher.group("xAmount")), Long.parseLong(matcher.group("yAmount"))), + coins); + } + + throw new IllegalArgumentException("Invalid button: " + line); + } + + private record Coordinate(long x, long y) {} + + private record Button(Coordinate movementAmount, long coins) {} + + private record Machine(Button a, Button b, Coordinate priceLocation) {} } diff --git a/adventofcode/src/test/java/org/ck/adventofcode/year2024/Day13Test.java b/adventofcode/src/test/java/org/ck/adventofcode/year2024/Day13Test.java index 200c2e64..e45b38b1 100644 --- a/adventofcode/src/test/java/org/ck/adventofcode/year2024/Day13Test.java +++ b/adventofcode/src/test/java/org/ck/adventofcode/year2024/Day13Test.java @@ -1,21 +1,30 @@ package org.ck.adventofcode.year2024; import org.ck.adventofcode.util.BaseAOCTest; -import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -@Disabled class Day13Test extends BaseAOCTest { @ParameterizedTest - @ValueSource(strings = {"01", "01a"}) + @ValueSource(strings = {"01a"}) void testOne(String name) throws Exception { runTest(new Day13()::partOne, "day13/%s".formatted(name)); } + @Test + void testOne() throws Exception { + runEncryptedTest(new Day13()::partOne, "day13/01"); + } + @ParameterizedTest - @ValueSource(strings = {"02", "02a"}) + @ValueSource(strings = {"02a"}) void testTwo(String name) throws Exception { runTest(new Day13()::partTwo, "day13/%s".formatted(name)); } + + @Test + void testTwo() throws Exception { + runEncryptedTest(new Day13()::partTwo, "day13/02"); + } } diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.result.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.result.txt index e69de29b..54f41fc0 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.result.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.result.txt @@ -0,0 +1 @@ +37686 \ No newline at end of file diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.txt index e69de29b..ff7a1a0a 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01.txt @@ -0,0 +1 @@ +6c/kGv27ju4gKsPLpRI7ng==@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 \ No newline at end of file diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.result.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.result.txt index e69de29b..7ad80225 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.result.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.result.txt @@ -0,0 +1 @@ +480 \ No newline at end of file diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.txt index e69de29b..444a287e 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/01a.txt @@ -0,0 +1,15 @@ +Button A: X+94, Y+34 +Button B: X+22, Y+67 +Prize: X=8400, Y=5400 + +Button A: X+26, Y+66 +Button B: X+67, Y+21 +Prize: X=12748, Y=12176 + +Button A: X+17, Y+86 +Button B: X+84, Y+37 +Prize: X=7870, Y=6450 + +Button A: X+69, Y+23 +Button B: X+27, Y+71 +Prize: X=18641, Y=10279 \ No newline at end of file diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.result.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.result.txt index e69de29b..cb08312e 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.result.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.result.txt @@ -0,0 +1 @@ +77204516023437 \ No newline at end of file diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.txt index e69de29b..ff7a1a0a 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02.txt @@ -0,0 +1 @@ +6c/kGv27ju4gKsPLpRI7ng==@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 \ No newline at end of file diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.result.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.result.txt index e69de29b..f9507f1e 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.result.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.result.txt @@ -0,0 +1 @@ +875318608908 \ No newline at end of file diff --git a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.txt b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.txt index e69de29b..444a287e 100644 --- a/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.txt +++ b/adventofcode/src/test/resources/org/ck/adventofcode/year2024/day13/02a.txt @@ -0,0 +1,15 @@ +Button A: X+94, Y+34 +Button B: X+22, Y+67 +Prize: X=8400, Y=5400 + +Button A: X+26, Y+66 +Button B: X+67, Y+21 +Prize: X=12748, Y=12176 + +Button A: X+17, Y+86 +Button B: X+84, Y+37 +Prize: X=7870, Y=6450 + +Button A: X+69, Y+23 +Button B: X+27, Y+71 +Prize: X=18641, Y=10279 \ No newline at end of file