diff --git a/README.md b/README.md new file mode 100644 index 0000000..6028dc1 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +# Advent Of Code 2024 + +My [AoC 2024](https://adventofcode.com/2024) Solutions in Swift + +### Overview + +All code for all days is compiled into a single macOS commandline binary, which can be run either from within Xcode or from Terminal. + +Each day has at least 3 associated source files: + +* `DayX.swift` for the solution code +* `DayX+Input.swift` for the puzzle input. This file is created by running the `input.sh` script (see below) but is not included in this repo for [legal reasons](https://www.reddit.com/r/adventofcode/wiki/faqs/copyright/inputs). +* `DayXTests.swift` for the test suite, if the puzzle has test cases + +`AoC.swift` has the `main()` function which simply runs one (or all) of the puzzles. + +The code relies on my own [AoCTools](https://github.com/gereons/AoCTools) package where I started collecting utility functions for things frequently used in AoC, such as 2d and 3d points, hexagonal grids, an A\* pathfinder and more. + +### Xcode + +Open the project via the `Package.swift` file (`xed .` from Terminal in the project directory). By default, hitting `Cmd-R` will run the puzzle for the current calendar day. To override this, change `defaultDay` in `AoC.swift`. + +`Cmd-U` runs the test suite for all 25 days. Run individual tests by clicking on them in the Test Inspector (`Cmd-6`) + +### Commandline + +From the commandline, use `swift run` or `swift run -c release`. + +To run the puzzle for a specific day without changing `AoC.swift`, use `swift run AdventOfCode X` to run day `X`. `X` can be a number from 1 to 25 or `all`. + +To run tests, use `swift test` for all tests, or e.g. `swift test --filter AoCTests.Day02Tests` to run the tests for day 2. + +### Puzzle Inputs + +Use the included `input.sh` script to download your puzzle input. To be able to run this script, [grab the session cookie](https://www.reddit.com/r/adventofcode/comments/a2vonl/how_to_download_inputs_with_a_script/) from [adventofcode.com](https://adventofcode.com) and create a `.aoc-session` file with the contents. `input.sh` downloads the input for the current day by default, use `input.sh X` to download day X's input. + + diff --git a/Tests/Day01Tests.swift b/Tests/Day01Tests.swift new file mode 100644 index 0000000..bd53b03 --- /dev/null +++ b/Tests/Day01Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 1 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day01Tests: XCTestCase { + let testInput = """ +""" + + func testDay01_part1() throws { + let day = Day01(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay01_part1_solution() throws { + let day = Day01(input: Day01.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay01_part2() throws { + let day = Day01(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay01_part2_solution() throws { + let day = Day01(input: Day01.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day02Tests.swift b/Tests/Day02Tests.swift new file mode 100644 index 0000000..4e4f6c4 --- /dev/null +++ b/Tests/Day02Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 2 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day02Tests: XCTestCase { + let testInput = """ +""" + + func testDay02_part1() throws { + let day = Day02(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay02_part1_solution() throws { + let day = Day02(input: Day02.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay02_part2() throws { + let day = Day02(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay02_part2_solution() throws { + let day = Day02(input: Day02.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day03Tests.swift b/Tests/Day03Tests.swift new file mode 100644 index 0000000..1b6bf26 --- /dev/null +++ b/Tests/Day03Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 3 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day03Tests: XCTestCase { + let testInput = """ +""" + + func testDay03_part1() throws { + let day = Day03(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay03_part1_solution() throws { + let day = Day03(input: Day03.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay03_part2() throws { + let day = Day03(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay03_part2_solution() throws { + let day = Day03(input: Day03.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day04Tests.swift b/Tests/Day04Tests.swift new file mode 100644 index 0000000..25dc081 --- /dev/null +++ b/Tests/Day04Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 4 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day04Tests: XCTestCase { + let testInput = """ +""" + + func testDay04_part1() throws { + let day = Day04(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay04_part1_solution() throws { + let day = Day04(input: Day04.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay04_part2() throws { + let day = Day04(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay04_part2_solution() throws { + let day = Day04(input: Day04.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day05Tests.swift b/Tests/Day05Tests.swift new file mode 100644 index 0000000..a723f3f --- /dev/null +++ b/Tests/Day05Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 5 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day05Tests: XCTestCase { + let testInput = """ +""" + + func testDay05_part1() throws { + let day = Day05(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay05_part1_solution() throws { + let day = Day05(input: Day05.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay05_part2() throws { + let day = Day05(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay05_part2_solution() throws { + let day = Day05(input: Day05.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day06Tests.swift b/Tests/Day06Tests.swift new file mode 100644 index 0000000..8517e2f --- /dev/null +++ b/Tests/Day06Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 6 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day06Tests: XCTestCase { + let testInput = """ +""" + + func testDay06_part1() throws { + let day = Day06(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay06_part1_solution() throws { + let day = Day06(input: Day06.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay06_part2() throws { + let day = Day06(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay06_part2_solution() throws { + let day = Day06(input: Day06.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day07Tests.swift b/Tests/Day07Tests.swift new file mode 100644 index 0000000..31fd278 --- /dev/null +++ b/Tests/Day07Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 7 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day07Tests: XCTestCase { + let testInput = """ +""" + + func testDay07_part1() throws { + let day = Day07(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay07_part1_solution() throws { + let day = Day07(input: Day07.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay07_part2() throws { + let day = Day07(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay07_part2_solution() throws { + let day = Day07(input: Day07.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day08Tests.swift b/Tests/Day08Tests.swift new file mode 100644 index 0000000..b657062 --- /dev/null +++ b/Tests/Day08Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 8 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day08Tests: XCTestCase { + let testInput = """ +""" + + func testDay08_part1() throws { + let day = Day08(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay08_part1_solution() throws { + let day = Day08(input: Day08.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay08_part2() throws { + let day = Day08(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay08_part2_solution() throws { + let day = Day08(input: Day08.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day09Tests.swift b/Tests/Day09Tests.swift new file mode 100644 index 0000000..53a561c --- /dev/null +++ b/Tests/Day09Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 9 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day09Tests: XCTestCase { + let testInput = """ +""" + + func testDay09_part1() throws { + let day = Day09(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay09_part1_solution() throws { + let day = Day09(input: Day09.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay09_part2() throws { + let day = Day09(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay09_part2_solution() throws { + let day = Day09(input: Day09.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day10Tests.swift b/Tests/Day10Tests.swift new file mode 100644 index 0000000..deac56e --- /dev/null +++ b/Tests/Day10Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 10 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day10Tests: XCTestCase { + let testInput = """ +""" + + func testDay10_part1() throws { + let day = Day10(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay10_part1_solution() throws { + let day = Day10(input: Day10.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay10_part2() throws { + let day = Day10(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay10_part2_solution() throws { + let day = Day10(input: Day10.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day11Tests.swift b/Tests/Day11Tests.swift new file mode 100644 index 0000000..4b2a533 --- /dev/null +++ b/Tests/Day11Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 11 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day11Tests: XCTestCase { + let testInput = """ +""" + + func testDay11_part1() throws { + let day = Day11(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay11_part1_solution() throws { + let day = Day11(input: Day11.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay11_part2() throws { + let day = Day11(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay11_part2_solution() throws { + let day = Day11(input: Day11.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day12Tests.swift b/Tests/Day12Tests.swift new file mode 100644 index 0000000..dda79b6 --- /dev/null +++ b/Tests/Day12Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 12 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day12Tests: XCTestCase { + let testInput = """ +""" + + func testDay12_part1() throws { + let day = Day12(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay12_part1_solution() throws { + let day = Day12(input: Day12.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay12_part2() throws { + let day = Day12(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay12_part2_solution() throws { + let day = Day12(input: Day12.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day13Tests.swift b/Tests/Day13Tests.swift new file mode 100644 index 0000000..d672427 --- /dev/null +++ b/Tests/Day13Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 13 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day13Tests: XCTestCase { + let testInput = """ +""" + + func testDay13_part1() throws { + let day = Day13(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay13_part1_solution() throws { + let day = Day13(input: Day13.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay13_part2() throws { + let day = Day13(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay13_part2_solution() throws { + let day = Day13(input: Day13.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day14Tests.swift b/Tests/Day14Tests.swift new file mode 100644 index 0000000..c63d786 --- /dev/null +++ b/Tests/Day14Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 14 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day14Tests: XCTestCase { + let testInput = """ +""" + + func testDay14_part1() throws { + let day = Day14(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay14_part1_solution() throws { + let day = Day14(input: Day14.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay14_part2() throws { + let day = Day14(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay14_part2_solution() throws { + let day = Day14(input: Day14.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day15Tests.swift b/Tests/Day15Tests.swift new file mode 100644 index 0000000..be48eed --- /dev/null +++ b/Tests/Day15Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 15 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day15Tests: XCTestCase { + let testInput = """ +""" + + func testDay15_part1() throws { + let day = Day15(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay15_part1_solution() throws { + let day = Day15(input: Day15.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay15_part2() throws { + let day = Day15(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay15_part2_solution() throws { + let day = Day15(input: Day15.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day16Tests.swift b/Tests/Day16Tests.swift new file mode 100644 index 0000000..0e336fe --- /dev/null +++ b/Tests/Day16Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 16 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day16Tests: XCTestCase { + let testInput = """ +""" + + func testDay16_part1() throws { + let day = Day16(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay16_part1_solution() throws { + let day = Day16(input: Day16.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay16_part2() throws { + let day = Day16(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay16_part2_solution() throws { + let day = Day16(input: Day16.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day17Tests.swift b/Tests/Day17Tests.swift new file mode 100644 index 0000000..6d2a921 --- /dev/null +++ b/Tests/Day17Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 17 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day17Tests: XCTestCase { + let testInput = """ +""" + + func testDay17_part1() throws { + let day = Day17(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay17_part1_solution() throws { + let day = Day17(input: Day17.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay17_part2() throws { + let day = Day17(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay17_part2_solution() throws { + let day = Day17(input: Day17.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day18Tests.swift b/Tests/Day18Tests.swift new file mode 100644 index 0000000..7ba448f --- /dev/null +++ b/Tests/Day18Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 18 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day18Tests: XCTestCase { + let testInput = """ +""" + + func testDay18_part1() throws { + let day = Day18(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay18_part1_solution() throws { + let day = Day18(input: Day18.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay18_part2() throws { + let day = Day18(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay18_part2_solution() throws { + let day = Day18(input: Day18.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day19Tests.swift b/Tests/Day19Tests.swift new file mode 100644 index 0000000..4222424 --- /dev/null +++ b/Tests/Day19Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 19 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day19Tests: XCTestCase { + let testInput = """ +""" + + func testDay19_part1() throws { + let day = Day19(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay19_part1_solution() throws { + let day = Day19(input: Day19.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay19_part2() throws { + let day = Day19(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay19_part2_solution() throws { + let day = Day19(input: Day19.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day20Tests.swift b/Tests/Day20Tests.swift new file mode 100644 index 0000000..51fa64a --- /dev/null +++ b/Tests/Day20Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 20 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day20Tests: XCTestCase { + let testInput = """ +""" + + func testDay20_part1() throws { + let day = Day20(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay20_part1_solution() throws { + let day = Day20(input: Day20.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay20_part2() throws { + let day = Day20(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay20_part2_solution() throws { + let day = Day20(input: Day20.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day21Tests.swift b/Tests/Day21Tests.swift new file mode 100644 index 0000000..84f4761 --- /dev/null +++ b/Tests/Day21Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 21 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day21Tests: XCTestCase { + let testInput = """ +""" + + func testDay21_part1() throws { + let day = Day21(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay21_part1_solution() throws { + let day = Day21(input: Day21.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay21_part2() throws { + let day = Day21(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay21_part2_solution() throws { + let day = Day21(input: Day21.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day22Tests.swift b/Tests/Day22Tests.swift new file mode 100644 index 0000000..1d07405 --- /dev/null +++ b/Tests/Day22Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 22 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day22Tests: XCTestCase { + let testInput = """ +""" + + func testDay22_part1() throws { + let day = Day22(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay22_part1_solution() throws { + let day = Day22(input: Day22.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay22_part2() throws { + let day = Day22(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay22_part2_solution() throws { + let day = Day22(input: Day22.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day23Tests.swift b/Tests/Day23Tests.swift new file mode 100644 index 0000000..7e46523 --- /dev/null +++ b/Tests/Day23Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 23 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day23Tests: XCTestCase { + let testInput = """ +""" + + func testDay23_part1() throws { + let day = Day23(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay23_part1_solution() throws { + let day = Day23(input: Day23.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay23_part2() throws { + let day = Day23(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay23_part2_solution() throws { + let day = Day23(input: Day23.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day24Tests.swift b/Tests/Day24Tests.swift new file mode 100644 index 0000000..e6e2a10 --- /dev/null +++ b/Tests/Day24Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 24 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day24Tests: XCTestCase { + let testInput = """ +""" + + func testDay24_part1() throws { + let day = Day24(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay24_part1_solution() throws { + let day = Day24(input: Day24.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay24_part2() throws { + let day = Day24(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay24_part2_solution() throws { + let day = Day24(input: Day24.input) + XCTAssertEqual(day.part2(), 0) + } +} diff --git a/Tests/Day25Tests.swift b/Tests/Day25Tests.swift new file mode 100644 index 0000000..1223238 --- /dev/null +++ b/Tests/Day25Tests.swift @@ -0,0 +1,32 @@ +// +// Advent of Code 2024 Day 25 Tests +// + +import XCTest +@testable import AdventOfCode + +@MainActor +final class Day25Tests: XCTestCase { + let testInput = """ +""" + + func testDay25_part1() throws { + let day = Day25(input: testInput) + XCTAssertEqual(day.part1(), 0) + } + + func testDay25_part1_solution() throws { + let day = Day25(input: Day25.input) + XCTAssertEqual(day.part1(), 0) + } + + func testDay25_part2() throws { + let day = Day25(input: testInput) + XCTAssertEqual(day.part2(), 0) + } + + func testDay25_part2_solution() throws { + let day = Day25(input: Day25.input) + XCTAssertEqual(day.part2(), 0) + } +}