summaryrefslogtreecommitdiff
path: root/Day2
diff options
context:
space:
mode:
authorAndreas Grois <andi@grois.info>2022-12-02 22:47:31 +0100
committerAndreas Grois <andi@grois.info>2022-12-02 22:47:31 +0100
commit15392a2813dd0902e9276deecbea9004049c0268 (patch)
tree1c5471b68b8837524988c7e9ed85988fd29a5bdb /Day2
parent84f908e3e56e1463f246a5aef4b92fc341246026 (diff)
Day 2
Diffstat (limited to 'Day2')
-rw-r--r--Day2/CHANGELOG.md5
-rw-r--r--Day2/Day2.cabal34
-rw-r--r--Day2/app/Main.hs61
-rw-r--r--Day2/input2500
4 files changed, 2600 insertions, 0 deletions
diff --git a/Day2/CHANGELOG.md b/Day2/CHANGELOG.md
new file mode 100644
index 0000000..3b3231f
--- /dev/null
+++ b/Day2/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Revision history for Day2
+
+## 0.1.0.0 -- YYYY-mm-dd
+
+* First version. Released on an unsuspecting world.
diff --git a/Day2/Day2.cabal b/Day2/Day2.cabal
new file mode 100644
index 0000000..976a581
--- /dev/null
+++ b/Day2/Day2.cabal
@@ -0,0 +1,34 @@
+cabal-version: 2.4
+name: Day2
+version: 0.1.0.0
+
+-- A short (one-line) description of the package.
+-- synopsis:
+
+-- A longer description of the package.
+-- description:
+
+-- A URL where users can report bugs.
+-- bug-reports:
+
+-- The license under which the package is released.
+-- license:
+author: Andreas Grois
+maintainer: andi@grois.info
+
+-- A copyright notice.
+-- copyright:
+-- category:
+extra-source-files: CHANGELOG.md
+
+executable Day2
+ main-is: Main.hs
+
+ -- Modules included in this executable, other than Main.
+ -- other-modules:
+
+ -- LANGUAGE extensions used by modules in this package.
+ -- other-extensions:
+ build-depends: base ^>=4.16.3.0
+ hs-source-dirs: app
+ default-language: Haskell2010
diff --git a/Day2/app/Main.hs b/Day2/app/Main.hs
new file mode 100644
index 0000000..eb2a05e
--- /dev/null
+++ b/Day2/app/Main.hs
@@ -0,0 +1,61 @@
+module Main (main) where
+
+import System.Environment
+
+main :: IO ()
+main = getArgs >>= readFile . head >>= print . solveDay2
+
+solveDay2 :: String -> (Integer, Integer)
+solveDay2 x = (solveDay2Part toGamePart1 x, solveDay2Part toGamePart2 x)
+
+solveDay2Part :: (String -> Game) -> String -> Integer
+solveDay2Part c = sum . map (pointsFromString c) . lines
+
+data Sign = Rock | Paper | Scissors deriving Eq
+newtype Game = Game (Sign, Sign)
+
+pointsFromString :: (String -> Game) -> String -> Integer
+pointsFromString = (points .)
+
+points :: Game -> Integer
+points (Game (opponent, mine)) = winning opponent mine + cardScore mine
+ where winning a b | a == b = 3
+ winning Rock Paper = 6
+ winning Rock Scissors = 0
+ winning Paper Scissors = 6
+ winning Paper Rock = 0
+ winning Scissors Rock = 6
+ winning Scissors Paper = 0
+ cardScore Rock = 1
+ cardScore Paper = 2
+ cardScore Scissors = 3
+
+toGamePart1 :: String -> Game
+toGamePart1 [a,_,b] = Game (toSign a, toSign b)
+
+toGamePart2 :: String -> Game
+toGamePart2 [a,_,b] = Game (toSign a, toCheatedSign (toSign a) (toCheat b))
+
+toSign :: Char -> Sign
+toSign 'A' = Rock
+toSign 'B' = Paper
+toSign 'C' = Scissors
+toSign 'X' = Rock
+toSign 'Y' = Paper
+toSign 'Z' = Scissors
+
+data Cheat = Win | Draw | Lose
+
+toCheatedSign :: Sign -> Cheat -> Sign
+toCheatedSign a Draw = a
+toCheatedSign Rock Win = Paper
+toCheatedSign Rock Lose = Scissors
+toCheatedSign Paper Win = Scissors
+toCheatedSign Paper Lose = Rock
+toCheatedSign Scissors Win = Rock
+toCheatedSign Scissors Lose = Paper
+
+toCheat :: Char -> Cheat
+toCheat 'X' = Lose
+toCheat 'Y' = Draw
+toCheat 'Z' = Win \ No newline at end of file
diff --git a/Day2/input b/Day2/input
new file mode 100644
index 0000000..c08c4d1
--- /dev/null
+++ b/Day2/input
@@ -0,0 +1,2500 @@
+A X
+A X
+A Z
+B X
+A X
+B Z
+A X
+A X
+A X
+A X
+C Z
+C Y
+A X
+A X
+A Z
+C Y
+A Z
+B Y
+C Z
+A X
+B Y
+C X
+C Z
+C Y
+A Y
+B X
+B X
+A X
+B X
+A X
+C X
+B Z
+C Y
+A X
+A X
+C Z
+A Z
+A X
+B X
+B X
+A X
+B X
+B Y
+A X
+A X
+A Z
+A Y
+C Y
+A Z
+C Z
+C Y
+A Z
+A X
+B Z
+A X
+C Y
+B Z
+C Y
+A X
+A Y
+C Y
+A Z
+B Z
+A X
+C Y
+A X
+A X
+B X
+C Y
+A Y
+A X
+C Z
+B Z
+A X
+B X
+B Z
+A X
+A Z
+A X
+A X
+A Y
+A Z
+A X
+B X
+A Z
+A Z
+C Y
+A X
+B Z
+C Y
+C Z
+A X
+A Z
+A X
+B Y
+A X
+C X
+A X
+A X
+C Y
+C X
+A X
+C Y
+B Z
+C Z
+C Y
+B Z
+A X
+C Y
+B Z
+A X
+B Z
+A X
+B Y
+A Z
+B X
+A X
+A X
+A X
+C Y
+C X
+A Y
+C Z
+C Y
+B Z
+A X
+A X
+B X
+A X
+A X
+A X
+C Y
+A X
+A X
+A Z
+C Y
+A Z
+A X
+A X
+A X
+C Y
+A Y
+A X
+A X
+C Z
+C Y
+B X
+C Z
+C Y
+B X
+C Y
+A X
+C Z
+A X
+B Y
+C X
+A X
+B Y
+B Y
+A Z
+A X
+A X
+C X
+A Y
+B Y
+C Y
+B Z
+A X
+A X
+A Y
+A X
+A X
+C Y
+A X
+C Y
+C Y
+C Z
+A Z
+A X
+C Y
+C X
+C Y
+A X
+A X
+C Y
+A Z
+A Y
+A Y
+B Z
+B Y
+B X
+C Y
+A X
+C Y
+C Z
+A X
+A Y
+A Y
+B X
+C Y
+A X
+B Z
+A X
+C Y
+B X
+A Y
+C X
+C Y
+A X
+C Y
+B Z
+C Y
+C Y
+C X
+B X
+C X
+C Y
+B Z
+C Z
+C Y
+A X
+A Z
+C Y
+A Z
+B X
+C X
+C Y
+A Z
+C Y
+C X
+A X
+A X
+A X
+B Y
+A X
+A X
+B Y
+B Z
+A X
+A Y
+A Z
+B Y
+A X
+A X
+A X
+B Z
+A X
+C Y
+A X
+A X
+B Y
+A X
+C Y
+B X
+C Y
+A X
+A X
+C X
+A Y
+A X
+B X
+A X
+C Y
+C Y
+C Z
+A Y
+B Y
+B X
+A X
+A X
+A X
+C Y
+A Y
+A X
+A Y
+C Y
+A X
+A X
+B Y
+C Z
+A Y
+B Z
+C Y
+A X
+C Z
+B X
+C Y
+B Z
+C Y
+B Z
+A Z
+A X
+A X
+C Z
+C X
+A X
+A X
+C Y
+B Z
+B Y
+A X
+A X
+A X
+B X
+B X
+B Y
+C Y
+C Z
+A X
+C X
+C Z
+A X
+A X
+C Y
+A X
+A X
+C Z
+B Z
+B Z
+A X
+B X
+A Z
+C Z
+C Z
+B X
+B Z
+B Z
+C Y
+A X
+A Y
+C Z
+A X
+A X
+A X
+A Y
+A X
+A X
+A Z
+C Y
+C Y
+A X
+A X
+A X
+A Z
+B Z
+C Y
+A Z
+A X
+B Y
+A X
+A X
+C Z
+A Z
+A X
+C Y
+A Y
+C X
+B Z
+C Y
+C Y
+A X
+C Y
+B Y
+A X
+A X
+C X
+B X
+B Z
+A Y
+B X
+B Z
+B Z
+A X
+A Y
+B Y
+B Y
+A Z
+C Y
+A X
+A X
+B Y
+C X
+A Z
+B X
+B Z
+A X
+A Y
+C Y
+B X
+B Y
+C Y
+A X
+B Y
+B X
+A X
+C Y
+B Y
+B Z
+B Y
+C Y
+C Y
+B Z
+C Y
+B X
+A X
+A X
+B Y
+B X
+B X
+C Y
+C Z
+B X
+A X
+A Z
+A Y
+C Y
+C Z
+A X
+A X
+A X
+C X
+A Y
+C Y
+C X
+A X
+A X
+A X
+A X
+B Z
+A X
+A X
+A X
+A X
+A X
+C Y
+C Z
+B Z
+C Z
+A Z
+C Z
+A X
+B X
+A Z
+A X
+A X
+A X
+A X
+B Y
+A Z
+C Y
+B Z
+A Y
+C Z
+C X
+B Z
+C Z
+C Z
+C X
+C Y
+B X
+C Y
+C X
+A X
+A Y
+A X
+C X
+A X
+A X
+C X
+B Z
+A X
+A X
+B X
+C Z
+A X
+A X
+B Y
+A X
+B Z
+C Y
+A Y
+A Y
+C Y
+A X
+A Z
+C X
+A X
+C Y
+A X
+B X
+C Y
+A X
+B Y
+A X
+A X
+A X
+C Y
+C X
+B X
+A Y
+A X
+A X
+A X
+C Y
+C Z
+A Z
+A X
+C Y
+A X
+B Z
+C Z
+B X
+B X
+A X
+A X
+C Z
+C X
+A X
+A Z
+A X
+C Y
+A X
+C Y
+A Z
+A X
+C Z
+C X
+B X
+B Z
+C X
+A Z
+B X
+C Y
+B X
+B Y
+B X
+A X
+C Y
+B Y
+C Y
+C Z
+C Z
+B Y
+C Y
+B Y
+A Y
+B Z
+A X
+B Z
+C Y
+A X
+A X
+A X
+A X
+C Z
+C Z
+C Z
+A X
+A X
+C Z
+C Z
+A X
+C Y
+A Z
+A Z
+B Y
+C Z
+A Z
+C Z
+C Y
+A X
+B Z
+C Y
+C Z
+A Z
+C Y
+A X
+A X
+A X
+A X
+B Z
+B Z
+A X
+B Z
+A X
+A X
+A X
+C Z
+C X
+A X
+C X
+A Z
+B X
+A X
+A X
+A X
+A Z
+B Y
+B Y
+A X
+C Y
+A X
+C Y
+A X
+A X
+A Y
+B X
+A X
+B Z
+A X
+C Y
+C Y
+A Z
+A X
+A X
+B X
+C Y
+C Z
+A X
+A X
+B X
+A Y
+A Z
+C Z
+A X
+B Z
+B Y
+A Y
+B Z
+A Y
+A X
+C Y
+A Z
+A X
+A X
+A X
+C Y
+C Y
+A Z
+A Y
+C X
+A X
+A X
+A X
+C Y
+A X
+B Z
+C Y
+B Y
+C Z
+A X
+B Z
+B Y
+B X
+C Y
+C Z
+B Y
+C Y
+C Y
+C Y
+A Z
+A X
+B Y
+C Y
+C Z
+A Y
+A X
+B Z
+C Y
+A Z
+C Z
+A X
+A Z
+B X
+C Z
+A X
+B Y
+C Z
+C Y
+C Y
+B Y
+A Y
+C Y
+B Y
+C Y
+C Z
+B X
+A X
+A X
+A X
+B Y
+A X
+A X
+C Z
+C Y
+C Z
+B Z
+A X
+B X
+A Y
+A Z
+B Y
+C Y
+C X
+A X
+C Y
+A Y
+A Z
+B Z
+A Z
+A Y
+C Y
+A X
+C X
+C Y
+B Y
+B Y
+B Y
+A X
+C Z
+A X
+C Y
+A Z
+B Z
+C Y
+C Y
+C Y
+C Y
+B X
+A Y
+C X
+C X
+A X
+A Z
+B X
+A X
+C Y
+B X
+C Y
+B X
+C Y
+A X
+A Z
+C Y
+A Y
+A X
+A Z
+A X
+B Z
+A X
+B Y
+C Z
+A X
+B X
+B X
+A X
+C Z
+A X
+C Y
+A X
+A X
+B X
+A X
+C Z
+A X
+A Y
+C Y
+B X
+B X
+B Z
+A X
+A X
+A X
+A X
+B Y
+A Y
+A X
+C Z
+C Y
+C Z
+A Z
+A X
+B X
+C Y
+A X
+C Z
+A Z
+A X
+A X
+B X
+A X
+B Z
+B X
+A Y
+A Z
+A Y
+A Z
+A X
+C Y
+C Y
+B X
+C Y
+B X
+A X
+B Z
+C Y
+A Y
+C Y
+C Y
+A Z
+B Z
+B X
+A X
+B Z
+C Y
+C Y
+C Y
+A Z
+A X
+A X
+C Y
+B X
+B X
+A X
+A Z
+A X
+A X
+A Z
+C Y
+B X
+A X
+A Y
+A X
+B Z
+A Z
+C Y
+A X
+A X
+A Y
+A X
+A X
+A X
+B X
+B X
+A Z
+B Z
+A Y
+A X
+B X
+C X
+A Z
+B Z
+C Y
+B Y
+C Y
+B X
+A X
+C Z
+B Y
+A X
+C Y
+C Y
+C Y
+A Y
+B Y
+A Z
+B Z
+A X
+A Y
+C Y
+C X
+A X
+C Y
+C Y
+A X
+A X
+A X
+B X
+B Z
+A Z
+A X
+C Z
+C Z
+B X
+C Z
+A Y
+A X
+A Y
+B Z
+A Y
+A X
+C Y
+B X
+A X
+B X
+A X
+C X
+A X
+B Y
+A Z
+C Y
+A X
+C X
+B Z
+A X
+C Y
+A Y
+C Y
+A X
+B X
+C Y
+A X
+B X
+A X
+A Y
+C Z
+A X
+A X
+A X
+A X
+B X
+C X
+A X
+A X
+C Y
+C Y
+A X
+A X
+A Y
+C Y
+A X
+B Z
+A Z
+C Y
+B X
+A Y
+A Z
+A X
+A X
+C X
+A X
+B X
+A X
+C Y
+B Z
+B Z
+A X
+B Y
+A X
+B Y
+B Z
+B X
+B Y
+C Y
+A X
+C Y
+A X
+A X
+A X
+A Z
+C Y
+C Y
+A Y
+B X
+A Z
+A Y
+A Y
+A X
+B X
+C Y
+A X
+C X
+C Y
+C Z
+A X
+A Z
+A Z
+A Z
+A X
+C Y
+A X
+A Y
+A X
+C Z
+C Y
+C Y
+B Z
+B Z
+B Z
+A X
+C Z
+A Z
+A X
+A X
+A X
+B Z
+B X
+A X
+B Z
+B Y
+C Y
+C Y
+A X
+A X
+C Y
+C Y
+C Z
+B X
+A X
+A X
+C Y
+A X
+C Y
+A Z
+C Y
+A X
+C Z
+B Z
+C Z
+C Y
+B Z
+C Y
+B X
+B X
+B X
+C Y
+A Z
+A X
+C Y
+A Y
+C Z
+A Y
+C Z
+B Y
+C Y
+A X
+A Y
+A X
+C X
+C Y
+C Y
+C Y
+C Y
+A Y
+C Y
+B Z
+C Y
+A X
+C Z
+B Z
+A Y
+A X
+B Z
+A Y
+A Z
+A X
+C Y
+C Y
+C Y
+A Y
+B X
+C Z
+A X
+B Z
+C Z
+A X
+B X
+B Y
+A X
+C Y
+B X
+A Z
+A Y
+A X
+A X
+A X
+B X
+C Z
+C Y
+B Y
+B X
+C Y
+A X
+A X
+C Y
+A Z
+C X
+A X
+A Z
+A X
+A X
+C Y
+A Z
+A Y
+A X
+A Z
+B Z
+A X
+B X
+B X
+B X
+B X
+C Y
+B Y
+A X
+A Y
+A Y
+A Y
+B Y
+A Y
+C Z
+A X
+A X
+A X
+A X
+A Y
+C Y
+B X
+A X
+A X
+A X
+A Z
+A X
+A X
+C Y
+B Y
+B X
+B X
+A X
+A X
+C Y
+A Z
+C X
+C X
+C Y
+A Y
+C Z
+B Z
+B X
+A X
+A X
+C X
+A X
+C X
+A Y
+B X
+A X
+B X
+B Z
+B Z
+B Z
+A X
+B Y
+C Z
+C X
+B X
+B Z
+A X
+A X
+C Z
+A X
+A X
+B Y
+A X
+C Y
+C Z
+B Z
+B Z
+A X
+A X
+A X
+A X
+B X
+B Z
+C Z
+A Y
+B X
+A X
+C Y
+C Y
+A Z
+C Z
+C Y
+A X
+C Z
+A Z
+C Y
+C Y
+A X
+A X
+B Y
+B Z
+A Z
+A Y
+A Y
+A X
+B X
+A Z
+C Y
+C Y
+B Z
+B Z
+B Y
+C Y
+B Y
+A X
+C Z
+B Z
+C X
+C Y
+A X
+A X
+B X
+C Y
+A X
+A X
+A Z
+A Y
+C Y
+A X
+A X
+B X
+B X
+C Z
+C Y
+B X
+C Y
+B Z
+A X
+A X
+C Y
+A Y
+B Z
+B Z
+A Y
+A Z
+A X
+A X
+A Z
+C Y
+A X
+C Y
+A Y
+C Y
+C Z
+B X
+B X
+C Y
+A X
+B X
+B Z
+C Y
+C Y
+C X
+A Y
+C Z
+A X
+C Y
+A Y
+A X
+A Y
+A X
+A X
+A Y
+B X
+B Y
+A X
+C Z
+C Y
+C Z
+A Z
+B Y
+C Y
+C X
+C Y
+A X
+C Z
+A X
+C Z
+A X
+B X
+A X
+A X
+B X
+A X
+A Y
+A X
+C Z
+C Y
+A Z
+B Y
+A X
+A Y
+A X
+C X
+B X
+B X
+A Z
+C Z
+C Y
+B Y
+A X
+B Y
+A Z
+A X
+A X
+A X
+A X
+C Y
+C Y
+B Y
+C Y
+B Z
+A X
+A X
+B Z
+B Y
+C Y
+C Y
+C Z
+C Y
+A X
+A X
+C X
+B Y
+B X
+C X
+B X
+B Y
+A X
+C X
+C X
+A Y
+C X
+A X
+A Z
+C X
+B Y
+C Y
+B Z
+B X
+A X
+A X
+A X
+B X
+C Y
+C Y
+B X
+A X
+C Y
+A X
+A X
+A X
+C Z
+A X
+A X
+C Z
+A X
+C X
+C Y
+C Z
+A X
+A X
+C Y
+A Y
+A X
+C Y
+A Y
+A X
+A Y
+A Z
+A X
+C Y
+A X
+C Y
+A X
+A Y
+A Z
+B X
+B X
+B X
+B Y
+C Z
+B Z
+C Y
+B Z
+A Z
+A X
+A X
+A X
+B X
+C Y
+B X
+B Z
+A Z
+C Y
+A Z
+C X
+A X
+B Y
+B Y
+A Z
+C Y
+A X
+A X
+A X
+A X
+B Y
+C X
+A X
+C Z
+C Y
+B X
+A Y
+A Z
+A X
+B Y
+C X
+B Z
+B Y
+A Y
+A X
+A X
+A X
+B Z
+A X
+C Z
+A X
+C Y
+A X
+B X
+A X
+A X
+A X
+A X
+A X
+A Z
+A Y
+A Y
+A Z
+B X
+A Y
+B Z
+C Y
+B Z
+C Z
+A Z
+C X
+C Y
+B X
+B X
+B Z
+A X
+A X
+A Z
+A X
+A X
+C Y
+C Y
+A Z
+C Z
+A Z
+B Z
+C X
+A X
+C Z
+C Y
+A X
+C Z
+B Y
+B Z
+A Y
+A X
+C Y
+A X
+C X
+A Z
+A X
+A X
+A Y
+C Y
+C Y
+A X
+A X
+C Y
+B Y
+B Z
+C Y
+C Z
+A Z
+A Y
+C Z
+B X
+C Y
+C Y
+A X
+A X
+A X
+A X
+B Z
+A X
+C Y
+A X
+A X
+B Z
+A X
+A X
+A X
+A X
+B X
+A X
+C Y
+A X
+A X
+C Y
+A Y
+A X
+C Y
+A X
+A Z
+B X
+A Y
+A Z
+C X
+C Y
+A X
+C Z
+C Y
+A Y
+A X
+A X
+C X
+A X
+B Y
+A X
+C Z
+A X
+B Y
+A X
+C X
+C Z
+A X
+C Y
+C X
+C Y
+B Z
+A Z
+A Y
+A Y
+C Y
+C Z
+C Y
+B X
+C Y
+A X
+C Y
+C Z
+A Z
+C X
+A X
+A Y
+B Y
+C Z
+C Y
+B Z
+C Z
+C Y
+B Z
+C Y
+A X
+B Z
+B Z
+C Z
+C X
+C Y
+A X
+C Z
+C Y
+A X
+C Y
+A X
+C Y
+A X
+B X
+C Y
+A X
+B X
+A Z
+B Z
+A X
+A Z
+A Y
+A X
+A Y
+A X
+C Z
+A Y
+A X
+C Y
+B X
+A X
+B Z
+C Y
+B X
+A X
+C Y
+A X
+A Y
+C Y
+B X
+C Y
+A Y
+C Y
+C Z
+B Y
+C Y
+A Y
+C Y
+B X
+A X
+A X
+A X
+A Z
+A X
+B Z
+A X
+C Y
+A Z
+B X
+A X
+A X
+A X
+A X
+A Z
+C Y
+B Z
+A X
+B Y
+C Y
+C Y
+B Y
+C X
+A X
+A X
+A X
+B X
+B X
+B X
+C X
+B Y
+B Z
+C Y
+C Y
+B X
+B Z
+A Z
+A Y
+A X
+A X
+A X
+C Y
+A X
+C Y
+C Z
+C Z
+C Z
+A Y
+C Y
+A X
+A X
+B Z
+A Y
+C X
+A Z
+A X
+A X
+A X
+A X
+A X
+A X
+A Z
+C Y
+C Y
+A Z
+A X
+A X
+A X
+A X
+B X
+C Y
+A X
+B X
+C Y
+A Y
+A Y
+C Y
+A X
+A Y
+B Z
+A X
+A X
+C Y
+C Y
+A Y
+A X
+A X
+A Z
+B X
+A X
+C Y
+A X
+B X
+C X
+A X
+A X
+A X
+A X
+A X
+C Y
+B Y
+C Y
+C Z
+A Y
+A X
+C Y
+B X
+B X
+A X
+A Y
+B X
+B Y
+C Y
+C X
+C X
+A X
+A X
+A X
+A X
+A Z
+C Z
+A X
+A X
+A X
+A Y
+B X
+B X
+A X
+A X
+A X
+A X
+C Z
+C Y
+A Z
+C Y
+B X
+A X
+C Y
+C Z
+A Z
+B Y
+A X
+B Y
+A X
+A Z
+C Y
+C Y
+C Y
+A X
+C Y
+A X
+A Z
+B Z
+B Y
+A Y
+C X
+C Z
+A Y
+C X
+A X
+A X
+C X
+A X
+A Y
+A X
+A Z
+A X
+A X
+A X
+C Y
+A Y
+A Y
+B Z
+A X
+C Y
+C Y
+B Y
+A Z
+C Z
+B Z
+A X
+A X
+C X
+A Y
+A Y
+C Y
+C Z
+B X
+B X
+C Z
+B Z
+A X
+C Z
+A X
+A Z
+C Z
+C Y
+B Z
+B Y
+C Z
+B Z
+C Y
+B X
+C Y
+A Z
+C Y
+B X
+C Z
+A Z
+A X
+B X
+B Y
+B Z
+B Z
+B X
+C Y
+A X
+C X
+A X
+B X
+B Z
+A Z
+A X
+A Y
+B Y
+A X
+C Y
+A Z
+B X
+A Y
+B X
+A X
+B Z
+A X
+C X
+A X
+C Y
+B X
+B Z
+B Z
+A X
+A Z
+B Y
+A X
+A X
+B X
+C Y
+C Z
+A X
+A X
+A X
+C Z
+C Y
+A Z
+B X
+A Z
+C Y
+A X
+A X
+A Z
+B X
+C Y
+A X
+A X
+A X
+A X
+B Z
+A X
+A Z
+A X
+C Y
+C X
+C Y
+A X
+B X
+B Z
+A X
+C X
+A X
+A Y
+A X
+C Z
+C Y
+C Y
+C Y
+B X
+B Z
+C Y
+A X
+A Y
+C Z
+A X
+C Y
+B Y
+B Y
+A X
+A X
+A X
+A X
+C Y
+B Z
+C Z
+C Y
+A Y
+B Y
+C Y
+A X
+B X
+A Y
+C X
+C Y
+C Y
+A Z
+C Y
+C Z
+C Y
+B X
+C Y
+B X
+B X
+C Y
+B Z
+A X
+A X
+B X
+C Y
+A Y
+B Y
+A X
+A X
+B Y
+C Y
+A X
+B X
+A X
+A Y
+B X
+C Y
+A Z
+A X
+C Y
+A X
+B Y
+A Z
+C Y
+B Z
+A Z
+B Z
+C X
+A X
+A Z
+B X
+B Y
+A X
+A Y
+B X
+C Y
+C Y
+C Y
+C Y
+A Z
+C Z
+A X
+B Y
+C Z
+A X
+C Y
+B Y
+C Z
+C Y
+A Z
+A X
+C Y
+C Y
+C Z
+A X
+C Y
+B Y
+B Z
+B X
+A X
+C Z
+C X
+A Y
+B X
+A X
+A X
+A X
+C Z
+C Z
+A Y
+C Y
+B Y
+C X
+B X
+C X
+A X
+A X
+B Y
+A X
+A X
+C X
+A Y
+A X
+C Y
+A Y
+B X
+C Y
+A X
+C Z
+A Z
+A Y
+A X
+A Y
+B Y
+A X
+A X
+C Z
+A Y
+C Y
+B Z
+C Y
+B Z
+A X
+B Z
+B Z
+A Y
+B Z
+B X
+C X
+A X
+A X
+B Y
+A X
+A X
+A X
+A X
+B X
+C Z
+A X
+A Y
+B X
+C X
+C Y
+A X
+A X
+C Y
+A X
+A X
+C Z
+C Z
+B X
+A Z
+B Z
+A X
+A X
+C Y
+A Y
+A X
+A Z
+A Y
+C Y
+A X
+C Y
+B X
+A X
+A X
+A X
+A Z
+A Z
+A X
+B Z
+A Z
+C Z
+B Y
+A X
+C Y
+B Z
+C Y
+A X
+B X
+C Y
+A X
+C Y
+A Z
+A X
+A Y
+B X
+C X
+B X
+A X
+C Y
+C Y
+B X
+B X
+C Y
+A X
+A Y
+B Y
+A X
+C X
+C Y
+A Y
+C Y
+C Z
+A X
+B Y
+A Y
+A X
+A Z
+A Y
+C Y
+A X
+A X
+B Z
+B Y
+B Y
+A X
+C Z
+A Y
+A X
+B Z
+C Z
+B Z
+A X
+B X
+C X
+A X
+A X
+A X
+A X
+A X
+C X
+A X
+A Z
+A X
+C Z
+A X
+A X
+B Z
+A Z
+B Z
+A Y
+A X
+C Y
+A X
+B Y
+C Y
+B Z
+B Z
+A X
+B Z
+C Y
+B Z
+A Z
+B Y
+B Z
+B X
+B Y
+A X
+B X
+A X
+C X
+B Y
+B Y
+B X
+B Z
+C Y
+C Y
+B Z
+A Z
+A X
+A X
+C Y
+A X
+A X
+A Y
+A X
+B Z
+A X
+A X
+B Z
+B Z
+A X
+A Z
+A X
+A X
+A X
+A Z
+A Z
+C Z
+C Y
+A Y
+A X
+C Z
+C Z
+B Y
+B X
+B Z
+C Y
+A X
+B Z
+A Z
+A X
+A X
+C X
+A X
+C Y
+C X
+A Z
+A Y
+B Z
+C Z
+B Y
+B X
+C Z
+A Z
+B X
+A X
+A X
+A X
+A Z
+B Y
+B Z
+A X
+A Y
+C Y
+A X
+A X
+C Z
+B Z
+C Y
+C X
+C Y
+C Y
+B Z
+A X
+B X
+A X
+A Z
+B Z
+A X
+B X
+C Y
+C Y
+B Y
+A X
+A Y
+C X
+B X
+C Z
+B X
+A X
+C Y
+A X
+C Y
+A X
+B Z
+C Y
+B Z
+A Z
+A Z
+C Z
+C Y
+A Z
+C Y
+A Z
+C Y
+B X
+A X
+B X
+A X
+C Y
+C X
+C Z
+A X
+A X
+A X
+B Y
+A X
+B Z
+A X
+A X
+A X
+C Y
+C Y
+A X
+B X
+C Y
+A Z
+A X
+C Y
+B X
+C Z
+C Y
+C X
+B X
+A X
+C X
+C Y
+A Y
+B Z
+B Y
+B X
+C Y
+C Z
+B Y
+A X
+C X
+A X
+B X
+C Z
+A X
+A X
+C Y
+A Z
+A X
+C Y
+A Z
+C X
+A X
+C Y
+A Z
+A X
+A X
+A Y
+A X
+C Y
+A X
+C Y
+A X
+A Y
+C Y
+C Y
+B Y
+B Y
+B Z
+A X
+B X
+B Z
+B X
+A X
+B X
+A X
+A X
+A X
+A X
+C X
+B X
+B X
+A X
+A Y
+A X
+B Y
+A X
+A Z
+B Z
+A Y
+A X
+A X
+C Y
+B Z
+C Y
+A X
+C Y
+A X
+C Y
+B X
+A Z
+B X
+A X
+A Z
+B Y
+B Y
+C X
+C Y
+A X
+B X
+C Z
+C Z
+A Y
+A X
+C Z
+A X
+A X
+C Z
+B X
+C Y
+A X
+C X
+C Z
+C Z
+B Z
+A X
+A X
+A X
+B X
+A Y
+B Z
+A X
+B Y
+A Z
+A X
+B Z
+B Y
+B X
+A X
+A Y
+C Z
+A X
+C Y
+C Y
+A Y
+A Y
+A Y
+C Z
+C Y
+B X
+A Y
+A Z
+A Y
+A X
+C Z
+C Y
+C Y
+C X
+B Y
+A X
+A X
+A X
+C Y
+B Y
+C X
+C Y
+A X
+A Z
+B Z
+B Y
+B Z
+B Z
+B X
+A X
+B Z
+C Y
+C Y
+C Y
+A X
+A X
+B Y
+B Z
+B Y
+C Y
+B Y
+A X
+C X
+A Z
+C Y
+C Y
+B X
+A Y
+A X
+C Y
+A Y
+A Z
+B X
+C Y
+C Z
+A X
+C Y
+B X
+B Y
+A X
+A X
+A X
+B Z
+A X
+C Z
+C Y
+B X
+C Y
+C Y