diff --git a/day01/Setup.hs b/Setup.hs similarity index 100% rename from day01/Setup.hs rename to Setup.hs diff --git a/aoc2022.cabal b/aoc2022.cabal new file mode 100644 index 0000000..08b48f1 --- /dev/null +++ b/aoc2022.cabal @@ -0,0 +1,106 @@ +name: aoc2022 +version: 0.1.0.0 +-- synopsis: +-- description: +homepage: https://git.raptorpond.com/henine/AoC2022 +license: MIT +license-file: LICENSE +author: henine +maintainer: example@example.com +copyright: 2022 HeNine +category: Misc +build-type: Simple +cabal-version: >=1.10 + +-- Day 1 + +test-suite day01aoctest + type: exitcode-stdio-1.0 + hs-source-dirs: src/day01/test, src/day01 + main-is: AoCTest.hs + other-modules: Day1Lib + build-depends: base + , HUnit + , split + ghc-options: -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 + +executable day011 + hs-source-dirs: src/day01 + main-is: Main1.hs + other-modules: + Day1Lib + default-language: Haskell2010 + build-depends: base >= 4.7 && < 5, split + ghc-options: -Wall + -Wcompat + -Widentities + -Wincomplete-record-updates + -Wincomplete-uni-patterns + -Wmissing-export-lists + -Wmissing-home-modules + -Wpartial-fields + -Wredundant-constraints + +executable day012 + hs-source-dirs: src/day01 + main-is: Main2.hs + other-modules: + Day1Lib + default-language: Haskell2010 + build-depends: base >= 4.7 && < 5, split + ghc-options: -Wall + -Wcompat + -Widentities + -Wincomplete-record-updates + -Wincomplete-uni-patterns + -Wmissing-export-lists + -Wmissing-home-modules + -Wpartial-fields + -Wredundant-constraints + +-- Day 2 + +test-suite day02aoctest + type: exitcode-stdio-1.0 + hs-source-dirs: src/day02/test, src/day02 + main-is: AoCTest.hs + other-modules: Day2Lib + build-depends: base + , HUnit + ghc-options: -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 + +executable day021 + hs-source-dirs: src/day02 + main-is: Main1.hs + other-modules: + Day2Lib + default-language: Haskell2010 + build-depends: base >= 4.7 && < 5, split + ghc-options: -Wall + -Wcompat + -Widentities + -Wincomplete-record-updates + -Wincomplete-uni-patterns + -Wmissing-export-lists + -Wmissing-home-modules + -Wpartial-fields + -Wredundant-constraints + +executable day022 + hs-source-dirs: src/day02 + main-is: Main2.hs + other-modules: + Day2Lib + default-language: Haskell2010 + build-depends: base >= 4.7 && < 5, split + ghc-options: -Wall + -Wcompat + -Widentities + -Wincomplete-record-updates + -Wincomplete-uni-patterns + -Wmissing-export-lists + -Wmissing-home-modules + -Wpartial-fields + -Wredundant-constraints \ No newline at end of file diff --git a/day01/data/input010.txt b/data/input010.txt similarity index 100% rename from day01/data/input010.txt rename to data/input010.txt diff --git a/day01/data/input011.txt b/data/input011.txt similarity index 100% rename from day01/data/input011.txt rename to data/input011.txt diff --git a/data/input020.txt b/data/input020.txt new file mode 100644 index 0000000..663384c --- /dev/null +++ b/data/input020.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z \ No newline at end of file diff --git a/data/input021.txt b/data/input021.txt new file mode 100644 index 0000000..3650ff9 --- /dev/null +++ b/data/input021.txt @@ -0,0 +1,2500 @@ +C Z +C Z +A X +A X +B Z +B Z +B Z +A Z +B X +A X +A X +A X +C Z +C Z +C X +A X +A X +A X +C Z +B Z +C Z +A Y +B Z +A X +C Y +A X +A X +C Y +C Z +A Y +B Z +A X +C Y +B Z +B Z +B Z +A X +C X +C X +B Z +A X +C Z +A X +B Z +A Y +C X +A X +C Z +C Z +B Z +C Y +C X +C X +C X +C X +A Y +C Y +C Z +C Y +A X +C Y +A X +B Z +A Y +C X +A X +B Y +A X +C X +C X +C Z +A X +C X +A X +C X +B Z +A Z +B Y +B Z +B Z +A X +C Y +B X +A X +A X +B Z +A X +C X +C Z +C Z +A X +C Z +C Z +C Z +C X +C Z +A X +B Z +B Y +C Z +B Z +B Z +A X +B Z +C Y +C Z +A X +A Y +C Z +A X +B Y +C Y +C Z +A X +C Y +C X +A X +C X +A X +C Z +A X +C Y +A Y +C Z +C X +C Y +C Y +A Y +A Y +C Y +C Y +A Y +A X +C Z +C Z +C X +C X +C Z +A Y +C Z +C Z +A Y +A Y +B Z +A X +B Z +C Y +B Z +C Z +C Y +C Y +B Y +C X +A X +A X +A X +A Y +A X +C Z +C Z +C Z +A X +B Z +A X +B Z +C Y +C Z +A Y +C Y +A X +A X +C Z +B X +C Z +C Z +B Z +B Z +B Z +C Z +C X +C Z +A X +B Z +C Z +C X +A X +A Y +B Y +A X +B Z +A X +C Z +C Z +C X +B Z +C Z +C Z +C X +A X +A X +B Y +C Y +C Z +B Y +A X +B Z +A X +B X +B Z +C X +C X +C Y +C X +B Y +B Z +C X +A Y +C X +C Y +A X +C Z +C Z +C X +B Z +A Y +B Z +A Y +B X +A X +C Z +B Z +C X +C X +C X +A X +C X +B Z +C Z +B Y +B Z +A X +A X +C Z +B Z +A X +A Z +C Y +B Z +C X +C Z +A Y +C X +A X +A X +A Y +B Z +A X +B Z +A Y +B X +C X +C Y +A X +C Z +B X +C Z +C X +C X +C Z +A X +B Z +C Z +C X +C Z +B Y +A X +C X +C Y +A X +C Z +A X +B Z +C X +C X +B Z +C Z +C Z +C Y +A X +C Z +C X +A X +C Y +C Z +C Z +C Y +B Y +B Z +A X +B Y +C X +A X +A X +C Y +C Z +B Z +C X +C X +B Z +C Z +A X +A Y +A X +C Y +A Y +B Y +A X +A X +C X +C X +B Z +A Y +B Z +C Z +A X +A Y +A X +C X +A X +C Z +B Y +C Z +A X +B Z +C Z +C Z +A X +A X +B Z +B Z +B Z +A X +C X +A X +A X +C Y +C Y +C X +C X +A X +A Y +B Y +C Z +C Z +B Y +C X +C Z +A Y +C X +C Z +C X +B Z +C Y +C Z +C X +C Y +C Z +B Z +C Z +B Z +A X +B Y +B Y +C Z +B Z +C X +C Z +C Z +C Z +B Y +B Z +C Z +B Y +A X +A X +C X +A X +C X +A X +B Z +A X +A X +A X +C Z +A Y +A X +C Z +C X +A X +C X +A X +B Z +C Z +C Z +C Z +A X +A X +C Z +A X +B Z +C X +C Z +C Y +B Z +A X +B Z +A X +A Z +B Y +B Z +B Z +B Z +A Y +C Z +A X +B Y +C X +B X +B Z +C X +B Y +C Z +A X +C X +B Z +A X +B Z +A X +A X +B Y +C Y +C X +C X +C Z +A X +C Z +A X +B Y +C X +C Y +B Y +B Y +A Y +C X +A Y +C Z +C Y +A X +C Z +C Z +B Z +A X +A X +A X +A X +B Z +C Z +C X +C X +C Z +A X +B Z +B Y +C Y +A Y +C X +B Z +A Y +B Z +C Z +B Z +C X +A X +B Z +A X +A Y +C Y +B Z +B Z +C X +C Z +C Z +C Z +A X +B Z +A Y +A X +C Y +A Y +B Z +A Y +C Z +A Y +A Y +C X +A X +B Z +A Y +B Z +C X +A X +B Y +B Z +C Z +C Z +B Z +A X +A X +B Y +C Z +C Y +B Z +C Z +A Y +A X +C X +C Z +A X +A X +A Z +C X +C X +B X +B Z +A Y +C X +A Y +C X +C Z +A Y +B Z +A X +B X +A Y +C X +C Y +A Y +C X +B Y +C Y +A X +B Z +A X +C Z +A X +A X +C Z +C Z +B X +C X +A Y +B Z +C Z +A X +A X +C Z +C Y +A X +C X +C Z +C Y +C X +C Y +C X +C Z +C Z +B Z +A X +A Y +B Z +A X +B Z +C X +B Y +A X +A X +A X +A X +B Z +C Z +B Z +B Y +C Z +C X +C Z +C X +B Z +C Z +A X +C Z +C Z +A Y +C X +A X +B Z +A X +B Z +B Y +A X +A X +A X +A Y +C Z +A X +B Y +A Y +B Y +C Y +A X +A X +C Y +A X +C Z +B Z +C X +C Z +A X +B Z +C Z +B Z +B Z +B Z +C X +C Z +A X +A Y +C X +C Z +B Z +B Y +C Z +B Y +B Z +C Z +A Y +B Z +C X +C Y +A X +B Y +A X +C Z +C X +C Z +A X +C X +B Z +B X +C Z +B Z +A Y +A X +A Y +C Z +C Y +A X +B X +A Z +C Y +C X +C Y +C X +C Y +B Z +C X +B Y +C Z +C Y +B Z +A Y +B Y +C Z +C X +B Z +A Y +C Z +C Z +C Z +C Y +C X +C X +B Y +C Z +A Y +C Z +C X +B Y +C X +B Z +B Z +B Z +B Z +C Y +C Z +C X +B X +C Z +C Z +C Z +C X +B Y +B Z +C X +A X +C Y +B X +C X +C X +C Z +A X +A X +B Z +B Z +A X +C Z +A X +A Y +C X +B X +C Y +C Y +A X +A X +C Z +C Z +B Y +B Y +B Z +C X +A X +A Z +C Z +B Y +C Y +C X +C Y +B Z +C X +A X +A X +C Z +C Y +B X +C Z +B Z +A X +C X +A Y +C Y +C Z +B Z +C Z +A X +C Y +B Z +C Y +B X +C Z +C Z +A X +A X +C X +C Z +C X +C Y +C Z +A Y +C X +C Z +B Y +B Y +C Z +A X +C Y +A X +C X +C X +B Y +C Z +C Z +A X +A Y +C Z +B Z +C Y +A X +A X +C Z +C Z +A X +C Z +C Z +B Z +B Z +A X +A Y +A X +C Z +C X +A X +B X +C Z +C Z +B Y +A X +B Z +C X +C Z +C Z +C Z +C X +A Y +A X +A Y +A X +A Y +C Z +C Z +B Z +B Y +A X +B Z +C Z +C X +C Y +C Z +A X +C Y +B Y +B Z +C Z +B Y +C X +C Z +B Y +B Z +B Y +C X +C Z +C X +C Z +B Y +B Z +C X +A X +A Y +B Z +B Y +A X +A X +C Z +A X +A X +C X +A X +C Z +C X +A X +B X +A Y +C X +A X +C Y +A X +C Z +A X +A X +C Z +A X +A X +C Z +A X +B Y +B Z +A X +C X +A X +C X +B Z +C Y +A Y +C Z +B Z +A X +C X +A X +B Y +C X +B Y +B Z +A X +B Z +C X +B Z +A X +A X +C X +A X +C X +A Y +C Z +A X +B Y +B Z +C Z +C Z +A X +C Y +B Z +C X +B Z +B Z +C Z +A X +C X +C X +A Y +A X +C Z +B Z +A X +B X +A X +B Z +B Z +C Z +B Y +C Z +A X +C Z +C Z +C Z +C X +A X +A X +C Y +B Y +C Z +B Y +A X +B Z +A Y +C Y +B Y +C Z +C X +C X +A X +B Y +A X +A X +C Z +C X +C Y +A X +A X +A X +C X +B Z +B Y +A X +B Y +C X +C Z +B Z +A X +C X +C Z +B Y +A X +C Z +B Z +B Z +A X +B Y +A X +B Y +C Z +C Z +B Z +C Z +C Y +A X +B Z +C Z +A Y +C Z +B Z +B Z +C Z +B Y +C Z +C Z +B Z +A Y +C X +C Y +B Z +C X +C Z +A X +A X +C Y +A Z +C Z +C X +B Z +B Z +C Y +A X +A Y +C Z +A X +A X +B Z +A X +C X +C X +B X +B X +A Z +B Y +A X +A Y +C Z +A X +A X +B Z +B Z +C Y +A X +C Y +C Z +A Y +C Y +B X +C X +A X +B Z +A X +A X +A X +A X +A X +B X +A X +C Z +B Z +B Z +B X +A X +C Z +B Z +C Z +C Z +C Y +A X +C Y +C Y +C Z +A Y +C Z +A X +C X +C Z +A X +A Y +C Z +C X +A X +C X +B Y +C Z +B Z +A X +C Y +B Z +B Y +A X +C Z +A X +B Z +C Z +C Y +C Z +A X +A X +B Z +B Y +A X +C X +C Y +B X +C Z +A Y +C X +B Y +B Z +A Y +C Y +C Z +C Z +C X +A X +A X +C X +C X +C Z +C X +C X +B X +B Z +B Z +C X +C Z +C X +A X +A X +A X +C Z +C Y +B Z +C X +C X +A X +C X +C Y +A X +B Y +A X +C Z +C Z +B Z +A X +A X +A X +B Z +C X +A X +B Y +B Z +C X +B Y +C X +B Y +C Z +B X +A X +A X +B Z +A X +A X +A X +B Z +A X +C Z +C X +C Z +A X +C Y +C Y +C Z +C Z +C Z +A X +C Z +C X +C Z +C Z +A X +B Z +C X +C Y +B X +B Z +B Z +A X +C Y +B Y +C Z +B Z +C Z +C X +A Z +C Z +B X +C X +C Z +C Z +C X +C Z +C Z +A X +B Z +C Z +C X +A X +B Z +C Y +C Y +B Y +C X +A X +A X +C Z +B Z +C X +C X +C X +B Y +C Z +B X +C X +C Z +A X +A X +C Z +C Z +C X +C X +C Z +A X +C Z +C X +C Z +C Z +A X +C Z +A X +A X +A X +B Z +A X +B Z +C Z +C Z +A X +C Z +C Z +B Z +C Z +A Y +C X +A X +A X +C X +A X +C X +C X +A Y +B Y +C Z +B Z +C X +B Y +C Y +C X +C Z +A X +C Y +B Z +B Y +A X +B Y +B Y +A X +C X +C X +A X +A Y +C Y +B Z +A X +B Z +A Y +B Y +C Z +C Z +C Z +A Y +B Y +B Y +C Z +B Z +C Z +A X +C Y +A X +B Y +B Z +C X +C Y +A X +B Z +B Z +A X +B Z +C Y +A X +C X +C Z +C Z +A X +C Y +A X +C X +C X +B Z +B Y +A X +C Y +B Z +B Y +A X +C Z +A X +B Y +A X +A X +A X +C X +A X +C Z +B Z +C Z +A X +A X +B Y +C X +C Y +C Z +A X +C Z +B Z +A X +B Z +A X +B Y +B Z +C Z +C Z +C Y +C X +A X +C Z +A Y +A X +B Z +B Y +A X +C X +C Z +B Z +A X +C Z +C X +C Y +A X +A X +C Z +A X +A X +C X +C X +A X +C X +C Z +A X +A X +C Y +A Y +B Z +C X +C X +B Y +B Z +A X +B Z +C Z +C Z +A Y +C Y +C Z +A X +C Z +A X +C Y +C X +B X +B Z +A X +A X +B Z +A X +C X +C X +A Y +A X +A X +C Y +B Z +A X +B Y +C X +B Z +C Y +B Y +A X +C Z +B Y +B Z +A X +B Y +C X +C Z +A X +B Z +A X +C Y +C Z +A X +A X +C Y +C Y +C X +A Y +C Z +B Z +A X +A Y +C Z +C Z +C Z +C Z +B Y +A Y +A X +A X +C X +A X +B Y +C Z +B Z +A Y +C X +C X +A Y +A X +A X +C X +C Z +C X +A X +A Y +C X +C Z +C X +A X +A X +C Z +C X +A X +C X +C Z +A X +A X +C Z +B Y +A X +C Z +C Y +C Z +C Z +B X +B Z +B X +A X +C Z +B X +C Z +A X +C Z +A Y +A Z +B Z +C X +A X +A X +A X +A X +A X +C Z +A X +B X +A Y +A X +C X +A X +A Y +A Y +B Y +C X +A Y +A X +C Z +C Z +C Y +B Z +C X +C Z +A Y +C X +C Y +C X +A X +B Y +C Z +C Z +A X +C Z +B Z +B Z +C X +C X +A X +B Y +C X +C X +A X +C Z +B Y +C Y +C Z +A X +B Z +C Z +B Y +C X +A X +B Y +B Z +A X +C Y +B Z +C Z +C X +A X +C X +A X +B Y +C X +A X +C Y +B Z +B Z +B Z +C Y +A X +A X +A Y +C Z +B X +B Z +A X +A X +C X +A X +C X +A X +C X +A X +A X +A X +A Y +A Y +B Y +A X +B Y +A X +B Y +B Z +B Y +A Y +C Z +C Z +C Z +C Z +A X +C Z +C X +C Y +C Z +B Z +B Z +B Z +C Y +C Z +B Z +C X +A Y +A X +C X +C Y +A Y +B Y +C X +C X +B Y +C Z +A X +C X +C X +C X +C X +C X +C X +B Z +C Y +A X +A X +B Y +B Z +A X +C X +C Z +A X +B X +B Z +C Y +B Z +C Z +C Y +A X +C Z +B Y +C X +A X +A Y +A X +C X +A Y +A Y +C Z +B Z +C Z +C X +C Y +B Y +A X +C X +C Z +B Y +A X +B X +B Z +C Z +B Z +B Z +A X +A Y +A X +A X +B Z +C Z +A X +A Y +C Z +C Z +C Y +A X +B Z +C X +C X +A Y +A X +C X +C Y +C Z +C Y +C X +A X +B Z +C Y +B Z +C X +A X +A X +C X +C Z +C Y +C Y +A X +A Y +C Z +A Y +B Y +C Y +A Y +C Z +B Y +C X +A X +B Z +C Z +A X +A X +B Z +C X +B Z +C Z +C Z +A Y +A X +C X +A X +B Z +C X +A X +A X +B Y +A Z +B Z +C X +C Z +C X +C Z +C X +A X +C Z +B Y +C Y +C Z +A X +C Z +A X +A Z +A X +A X +C Z +A X +B Z +C X +B Z +A X +C X +A X +C X +C Z +B Z +A Y +C Y +C Z +C Z +C X +C Z +A X +A X +B Y +B Z +C Y +B Z +A Y +A X +A X +B Z +B X +A X +B Y +B Z +C X +A X +A X +C Z +B Y +C X +B Y +A Y +A Z +A X +B Y +C X +C Z +C Z +C Y +C Z +A X +B X +C X +A Y +A X +C Z +C Y +C X +B Z +A X +C X +C Z +A X +C Z +A X +C X +C X +A Y +C Z +A X +C X +C Z +C Y +A X +A Y +A Y +C Z +C X +A X +C Z +A Y +A Y +A X +B Z +C Z +B Y +C Z +B Y +C X +C Z +B Y +A X +A X +B Z +A X +C Z +A X +A X +B Y +A X +B Z +A Y +A X +A Y +C Z +B Z +A X +B X +B Y +B Z +A X +A Z +B Y +B Z +C X +B Z +A X +B Z +C Z +B Y +C X +A X +A Y +B Y +A Y +C X +C X +B Y +A Y +B Z +C Z +B Z +A Y +A X +B Z +B Z +A Y +C Z +C Z +B Z +C X +B Z +B Y +B Z +B Z +A X +A X +C X +C Z +B Z +A X +B Z +C Y +C Z +A Z +A X +A X +C Z +A X +C Z +C Z +C Z +B Z +A X +A Y +B X +A X +A X +A X +C Z +B X +B X +A X +C Z +A X +B X +A X +A X +B Z +A X +C Z +C Y +A X +B Z +A X +C Z +B Z +A X +A X +B Y +B Y +C Y +A X +B Z +C Y +A X +C Z +B Z +A X +C Z +B Z +C X +B X +B Z +C Z +A X +B Z +A X +A X +A X +A X +C Z +B Z +B Y +C Z +A X +C Z +A X +C X +C X +A X +B Y +C X +B Z +A Y +C Y +B Z +C Y +C X +A X +B Z +C X +B Y +A X +A Y +B Y +B Y +A X +C X +C Z +B Z +A Y +A X +B Y +C X +B Z +B X +C Y +B X +C X +B Y +C X +A X +C Z +B Z +B Y +B Y +A X +A X +A Z +B Z +B Z +C X +C Y +A Y +C Z +C X +A X +C Z +C X +B Z +A Y +B Z +C Z +B Z +B Z +C X +B Z +C X +C X +B Z +A X +B Y +B Z +A X +C X +A X +C Y +A X +C X +B X +C Z +C Y +C Z +B Z +C X +A X +A X +A Y +C Z +C Y +A Y +C Z +B Z +C Z +C Y +A X +A X +C X +C Z +C Z +A Z +C Z +A X +B Z +C X +C Z +A X +B Z +C X +A X +A Y +B Y +C X +A X +A X +C X +C Y +B Z +C X +A X +C X +B Z +B Y +A Y +C Z +A X +C Z +C Z +A X +C Y +B Z +A Y +B Y +B Y +A X +A X +C X +C X +B Y +C Z +C Z +C Z +C X +C Y +C Z +B Z +C Z +A Y +C Z +A X +B Z +B Y +B Z +A X +A X +A X +A X +C X +C Z +B Z +C X +B Z +C Z +A X +C X +C Z +B Y +A X +C X +A X +B Z +B Z +A X +A X +B Y +C Y +C Y +C X +A X +B Z +C Y +B Z +A Y +B Y +B Y +A X +B Z +A X +C X +C Z +A X +B Z +A Y +C Y +B Z +C Z +C Y +A X +C Y +A X +C X +B Z +C X +A X +C Z +A X +B Y +B Z +C X +C Y +B X +A X +B Z +A X +B Y +C X +C X +C Y +C Y +C X +B Y +C Z +C X +B Z +B Y +C X +A Y +C Z +C Z +C X +B X +B Y +A X +A X +C Z +C X +C Y +A X +C Y +A Y +C Z +C X +A X +C Z +C X +A X +B X +C X +C X +C X +B Y +B Z +C X +C Z +A Y +B Y +C X +C X +A X +B Z +C Z +A X +C Y +C Z +A Y +B Z +C X +C Z +A X +C Z +B Z +B Y +B Z +A X +C X +A Y +C X +C Z +B Y +C Y +C Z +C Z +A X +A X +A X +C Z +B Y +C Z +A X +A X +B Z +B Y +B Z +C Z +B Z +A Y +C Y +C Z +B Y +A X +A X +C Z +B Y +C Z +A X +C X +B Y +A Y +B Z +A X +A X +A X +B Y +A X +C Z +B Y +C Z +B Y +C Z +C X +C Y +C X +A X +A X +A X +C Z +C X +C X +B Y +A Y +B Z +B X +C Z +B Y +A X +C Y +B Z +C X +A X +A X +A X +A X +C X +B Y +A X +A X +B Y +A X +B Z +C Z +A X +A X +A X +A X +B Z +A X +C Z +C X +C Y +B Z +C Z +A X +C Y +C Z +A X +A X +C X +B Z +C X +B Z +C Z +A X +A X +A Y +B Y +C Z +B Y +A X +C X +C Z +C Z +C X +A X +A X +C Z +A X +A Y +A X +A X +C Z +C X +C X +C Z +C X +A X +C Z +C Z +B Z +A Y +A Y +B Y +A X +A X +C X +C X +A X +A X +C X +C X +B Y +C Z +A X +B Y +A X +A X +A X +C X +C Y +B Z +B Y +B Z +C Z +C Z +C X +C Z +A X +B Z +A Y +C Z +B Z +A X +C Y +B Z +C Z +C Y +A X +B Y +C Z +A X +A X +A X +C Z +C Z +C X +A Y +C X +B Z +B Y +A X +C X +C X +A Y +A Y +A X +B X +B Z +B Y +B Y +A X +C Y +A X +C Z +C X +C X +C Z +B Z +B Z +C Y +C X +B Z +C Z +A Y +C Y +A X +B Z +A X +C Y +B Z +B Y +C Z +A X +A X +C Z +B Z +B Z +C Z +C Y +C Z +C Z +C X +A Y +A Y +B Z +C Z +B Y +C X +C X +A Z +C Z +A X +A X +C X +A Y +C X +A X +A X +A X +C Y +A X +B Y +A X +B Y +A X +A X +A Y +C X +C Z +A X +C X +B Y +B Z +B Z +A Y +C Z +C X +C X +B Z +B Z +C X +B Y +A X +B Y +A X +A X +C Y +B X +C X +A Z +A Z +A X +C Z +C Y +C Z +C Y \ No newline at end of file diff --git a/day01/day01.cabal b/day01/day01.cabal deleted file mode 100644 index 7278f04..0000000 --- a/day01/day01.cabal +++ /dev/null @@ -1,48 +0,0 @@ -name: day01 -version: 0.1.0.0 --- synopsis: --- description: -homepage: https://github.com/githubuser/day01#readme -license: MIT -license-file: ../LICENSE -author: Author name here -maintainer: example@example.com -copyright: 2022 Author name here -category: Web -build-type: Simple -cabal-version: >=1.10 - - -executable day011 - hs-source-dirs: src - main-is: Main1.hs - other-modules: - Lib - default-language: Haskell2010 - build-depends: base >= 4.7 && < 5, split - ghc-options: -Wall - -Wcompat - -Widentities - -Wincomplete-record-updates - -Wincomplete-uni-patterns - -Wmissing-export-lists - -Wmissing-home-modules - -Wpartial-fields - -Wredundant-constraints - -executable day012 - hs-source-dirs: src - main-is: Main2.hs - other-modules: - Lib - default-language: Haskell2010 - build-depends: base >= 4.7 && < 5, split - ghc-options: -Wall - -Wcompat - -Widentities - -Wincomplete-record-updates - -Wincomplete-uni-patterns - -Wmissing-export-lists - -Wmissing-home-modules - -Wpartial-fields - -Wredundant-constraints diff --git a/day01/src/Lib.hs b/day01/src/Lib.hs deleted file mode 100644 index a3ab502..0000000 --- a/day01/src/Lib.hs +++ /dev/null @@ -1,6 +0,0 @@ -module Lib (parseBackpacks) where - -import Data.List.Split - -parseBackpacks :: String -> [[Int]] -parseBackpacks input = [map read b | b <- splitOn [""] $ lines input] \ No newline at end of file diff --git a/day01/src/Main1.hs b/day01/src/Main1.hs deleted file mode 100644 index b8288c2..0000000 --- a/day01/src/Main1.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Main (main) where - --- import Debug.Trace - -import Lib - -main :: IO () -main = do - input <- getContents - let backpacks = parseBackpacks input - max_backpack = maximum [sum b | b <- backpacks] - print $ max_backpack - return () - diff --git a/day01/src/Main2.hs b/day01/src/Main2.hs deleted file mode 100644 index eb8725d..0000000 --- a/day01/src/Main2.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Main (main) where - --- import Debug.Trace -import Data.List (sort) - -import Lib - -main :: IO () -main = do - input <- getContents - let backpacks = parseBackpacks input - top_3 = sum $ take 3 $ reverse $ sort [sum b | b <- backpacks] - print $ top_3 - return () diff --git a/src/day01/Day1Lib.hs b/src/day01/Day1Lib.hs new file mode 100644 index 0000000..524144c --- /dev/null +++ b/src/day01/Day1Lib.hs @@ -0,0 +1,15 @@ +module Day1Lib (parseBackpacks, processInput1, processInput2) where + +import Data.List (sort) +import Data.List.Split + +parseBackpacks :: String -> [[Int]] +parseBackpacks input = [map read b | b <- splitOn [""] $ lines input] + +-- ################ + +processInput1 :: String -> Int +processInput1 = maximum . (map sum) . parseBackpacks + +processInput2 :: String -> Int +processInput2 = sum . (take 3) . reverse . sort . (map sum) . parseBackpacks \ No newline at end of file diff --git a/src/day01/Main1.hs b/src/day01/Main1.hs new file mode 100644 index 0000000..9dc18ff --- /dev/null +++ b/src/day01/Main1.hs @@ -0,0 +1,12 @@ +module Main (main) where + +-- import Debug.Trace + +import Day1Lib + +main :: IO () +main = do + input <- getContents + print $ processInput1 input + return () + diff --git a/src/day01/Main2.hs b/src/day01/Main2.hs new file mode 100644 index 0000000..fcb3207 --- /dev/null +++ b/src/day01/Main2.hs @@ -0,0 +1,11 @@ +module Main (main) where + +-- import Debug.Trace + +import Day1Lib (processInput2) + +main :: IO () +main = do + input <- getContents + print $ processInput2 input + return () diff --git a/src/day01/test/AoCTest.hs b/src/day01/test/AoCTest.hs new file mode 100644 index 0000000..3178f55 --- /dev/null +++ b/src/day01/test/AoCTest.hs @@ -0,0 +1,42 @@ +import System.IO +import Test.HUnit + +import Day1Lib (processInput1, processInput2) + +testCases1 = + [ ("data/input010.txt", 24000), + ("data/input011.txt", 69912) + ] + +testCase1 (file, result) = do + withFile + file + ReadMode + ( \handle -> do + contents <- hGetContents handle + assertEqual "input test" result $ processInput1 contents + ) + +testCases2 = + [ ("data/input010.txt", 45000), + ("data/input011.txt", 208180) + ] + +testCase2 (file, result) = do + withFile + file + ReadMode + ( \handle -> do + contents <- hGetContents handle + assertEqual "input test" result $ processInput2 contents + ) + +tests = + TestList $ + [TestCase (testCase1 c) | c <- testCases1] + ++ [TestCase (testCase2 c) | c <- testCases2] + +main :: IO () +main = do + runTestTT tests + return () diff --git a/src/day02/Day2Lib.hs b/src/day02/Day2Lib.hs new file mode 100644 index 0000000..bf64496 --- /dev/null +++ b/src/day02/Day2Lib.hs @@ -0,0 +1,61 @@ +module Day2Lib + ( Opponent (..), + Me (..), + Trick (..), + Hint (..), + assembleNaiveTrick, + evaluateTrick, + evaluateWin, + evaluateMe, + parseHint, + assembleTrick, + -- + processInput1, + processInput2, + ) +where + +data Opponent = A | B | C deriving (Show, Read, Eq, Enum) + +data Me = X | Y | Z deriving (Show, Read, Eq, Enum) + +data Hand = R | P | S deriving (Show, Eq, Enum) + +newtype Hint = Hint (Opponent, Me) deriving (Show, Eq) + +newtype Trick = Trick (Hand, Hand) deriving (Show, Eq) + +parseHint :: String -> (Opponent, Me) +parseHint (o : _ : m : []) = (read [o], read [m]) + +opponentHand :: Opponent -> Hand +opponentHand = toEnum . fromEnum + +naiveResponse :: Hand -> Me -> Hand +naiveResponse _ m = toEnum $ fromEnum m + +findResponse :: Hand -> Me -> Hand +findResponse o m = toEnum ((fromEnum o + fromEnum m - 1) `mod` 3) + +assembleTrick :: Hint -> Trick +assembleTrick (Hint (o, m)) = Trick (opponentHand o, findResponse (opponentHand o) m) + +assembleNaiveTrick :: Hint -> Trick +assembleNaiveTrick (Hint (o, m)) = Trick (opponentHand o, naiveResponse (opponentHand o) m) + +evaluateTrick :: Trick -> Int +evaluateTrick t = evaluateWin t + evaluateMe t + +evaluateMe :: Trick -> Int +evaluateMe (Trick (_, m)) = fromEnum m + 1 + +evaluateWin :: Trick -> Int +evaluateWin (Trick (o, m)) = 6 - (fromEnum o - fromEnum m + 1) `mod` 3 * 3 + +-- ###################################### + +processInput1 :: String -> Int +processInput1 = sum . (map $ evaluateTrick . assembleNaiveTrick . Hint . parseHint) . lines + +processInput2 :: String -> Int +processInput2 = sum . (map $ evaluateTrick . assembleTrick . Hint . parseHint) . lines diff --git a/src/day02/Main1.hs b/src/day02/Main1.hs new file mode 100644 index 0000000..71a6cce --- /dev/null +++ b/src/day02/Main1.hs @@ -0,0 +1,10 @@ +module Main (main) where + +import Day2Lib + +main :: IO () +main = do + input <- getContents + + print $ processInput1 input + return () diff --git a/src/day02/Main2.hs b/src/day02/Main2.hs new file mode 100644 index 0000000..75d3ccf --- /dev/null +++ b/src/day02/Main2.hs @@ -0,0 +1,10 @@ +module Main (main) where + +import Day2Lib (processInput2) + +main :: IO () +main = do + input <- getContents + + print $ processInput2 input + return () diff --git a/src/day02/test/AoCTest.hs b/src/day02/test/AoCTest.hs new file mode 100644 index 0000000..8bffb8d --- /dev/null +++ b/src/day02/test/AoCTest.hs @@ -0,0 +1,42 @@ +import System.IO +import Test.HUnit + +import Day2Lib (processInput1, processInput2) + +testCases1 = + [ ("data/input020.txt", 15), + ("data/input021.txt", 14264) + ] + +testCase1 (file, result) = do + withFile + file + ReadMode + ( \handle -> do + contents <- hGetContents handle + assertEqual "input test" result $ processInput1 contents + ) + +testCases2 = + [ ("data/input020.txt", 12), + ("data/input021.txt", 12382) + ] + +testCase2 (file, result) = do + withFile + file + ReadMode + ( \handle -> do + contents <- hGetContents handle + assertEqual "input test" result $ processInput2 contents + ) + +tests = + TestList $ + [TestCase (testCase1 c) | c <- testCases1] + ++ [TestCase (testCase2 c) | c <- testCases2] + +main :: IO () +main = do + runTestTT tests + return () diff --git a/day01/stack.yaml b/stack.yaml similarity index 100% rename from day01/stack.yaml rename to stack.yaml diff --git a/day01/stack.yaml.lock b/stack.yaml.lock similarity index 100% rename from day01/stack.yaml.lock rename to stack.yaml.lock