BGAB7OEZ6LD4XHNHDKL6XRMOF5GXB67RDXGKWN5ZLHVKXCEASX7QC C ZC ZA XA XB ZB ZB ZA ZB XA XA XA XC ZC ZC XA XA XA XC ZB ZC ZA YB ZA XC YA XA XC YC ZA YB ZA XC YB ZB ZB ZA XC XC XB ZA XC ZA XB ZA YC XA XC ZC ZB ZC YC XC XC XC XA YC YC ZC YA XC YA XB ZA YC XA XB YA XC XC XC ZA XC XA XC XB ZA ZB YB ZB ZA XC YB XA XA XB ZA XC XC ZC ZA XC ZC ZC ZC XC ZA XB ZB YC ZB ZB ZA XB ZC YC ZA XA YC ZA XB YC YC ZA XC YC XA XC XA XC ZA XC YA YC ZC XC YC YA YA YC YC YA YA XC ZC ZC XC XC ZA YC ZC ZA YA YB ZA XB ZC YB ZC ZC YC YB YC XA XA XA XA YA XC ZC ZC ZA XB ZA XB ZC YC ZA YC YA XA XC ZB XC ZC ZB ZB ZB ZC ZC XC ZA XB ZC ZC XA XA YB YA XB ZA XC ZC ZC XB ZC ZC ZC XA XA XB YC YC ZB YA XB ZA XB XB ZC XC XC YC XB YB ZC XA YC XC YA XC ZC ZC XB ZA YB ZA YB XA XC ZB ZC XC XC XA XC XB ZC ZB YB ZA XA XC ZB ZA XA ZC YB ZC XC ZA YC XA XA XA YB ZA XB ZA YB XC XC YA XC ZB XC ZC XC XC ZA XB ZC ZC XC ZB YA XC XC YA XC ZA XB ZC XC XB ZC ZC ZC YA XC ZC XA XC YC ZC ZC YB YB ZA XB YC XA XA XC YC ZB ZC XC XB ZC ZA XA YA XC YA YB YA XA XC XC XB ZA YB ZC ZA XA YA XC XA XC ZB YC ZA XB ZC ZC ZA XA XB ZB ZB ZA XC XA XA XC YC YC XC XA XA YB YC ZC ZB YC XC ZA YC XC ZC XB ZC YC ZC XC YC ZB ZC ZB ZA XB YB YC ZB ZC XC ZC ZC ZB YB ZC ZB YA XA XC XA XC XA XB ZA XA XA XC ZA YA XC ZC XA XC XA XB ZC ZC ZC ZA XA XC ZA XB ZC XC ZC YB ZA XB ZA XA ZB YB ZB ZB ZA YC ZA XB YC XB XB ZC XB YC ZA XC XB ZA XB ZA XA XB YC YC XC XC ZA XC ZA XB YC XC YB YB YA YC XA YC ZC YA XC ZC ZB ZA XA XA XA XB ZC ZC XC XC ZA XB ZB YC YA YC XB ZA YB ZC ZB ZC XA XB ZA XA YC YB ZB ZC XC ZC ZC ZA XB ZA YA XC YA YB ZA YC ZA YA YC XA XB ZA YB ZC XA XB YB ZC ZC ZB ZA XA XB YC ZC YB ZC ZA YA XC XC ZA XA XA ZC XC XB XB ZA YC XA YC XC ZA YB ZA XB XA YC XC YA YC XB YC YA XB ZA XC ZA XA XC ZC ZB XC XA YB ZC ZA XA XC ZC YA XC XC ZC YC XC YC XC ZC ZB ZA XA YB ZA XB ZC XB YA XA XA XA XB ZC ZB ZB YC ZC XC ZC XB ZC ZA XC ZC ZA YC XA XB ZA XB ZB YA XA XA XA YC ZA XB YA YB YC YA XA XC YA XC ZB ZC XC ZA XB ZC ZB ZB ZB ZC XC ZA XA YC XC ZB ZB YC ZB YB ZC ZA YB ZC XC YA XB YA XC ZC XC ZA XC XB ZB XC ZB ZA YA XA YC ZC YA XB XA ZC YC XC YC XC YB ZC XB YC ZC YB ZA YB YC ZC XB ZA YC ZC ZC ZC YC XC XB YC ZA YC ZC XB YC XB ZB ZB ZB ZC YC ZC XB XC ZC ZC ZC XB YB ZC XA XC YB XC XC XC ZA XA XB ZB ZA XC ZA XA YC XB XC YC YA XA XC ZC ZB YB YB ZC XA XA ZC ZB YC YC XC YB ZC XA XA XC ZC YB XC ZB ZA XC XA YC YC ZB ZC ZA XC YB ZC YB XC ZC ZA XA XC XC ZC XC YC ZA YC XC ZB YB YC ZA XC YA XC XC XB YC ZC ZA XA YC ZB ZC YA XA XC ZC ZA XC ZC ZB ZB ZA XA YA XC ZC XA XB XC ZC ZB YA XB ZC XC ZC ZC ZC XA YA XA YA XA YC ZC ZB ZB YA XB ZC ZC XC YC ZA XC YB YB ZC ZB YC XC ZB YB ZB YC XC ZC XC ZB YB ZC XA XA YB ZB YA XA XC ZA XA XC XA XC ZC XA XB XA YC XA XC YA XC ZA XA XC ZA XA XC ZA XB YB ZA XC XA XC XB ZC YA YC ZB ZA XC XA XB YC XB YB ZA XB ZC XB ZA XA XC XA XC XA YC ZA XB YB ZC ZC ZA XC YB ZC XB ZB ZC ZA XC XC XA YA XC ZB ZA XB XA XB ZB ZC ZB YC ZA XC ZC ZC ZC XA XA XC YB YC ZB YA XB ZA YC YB YC ZC XC XA XB YA XA XC ZC XC YA XA XA XC XB ZB YA XB YC XC ZB ZA XC XC ZB YA XC ZB ZB ZA XB YA XB YC ZC ZB ZC ZC YA XB ZC ZA YC ZB ZB ZC ZB YC ZC ZB ZA YC XC YB ZC XC ZA XA XC YA ZC ZC XB ZB ZC YA XA YC ZA XA XB ZA XC XC XB XB XA ZB YA XA YC ZA XA XB ZB ZC YA XC YC ZA YC YB XC XA XB ZA XA XA XA XA XB XA XC ZB ZB ZB XA XC ZB ZC ZC ZC YA XC YC YC ZA YC ZA XC XC ZA XA YC ZC XA XC XB YC ZB ZA XC YB ZB YA XC ZA XB ZC ZC YC ZA XA XB ZB YA XC XC YB XC ZA YC XB YB ZA YC YC ZC ZC XA XA XC XC XC ZC XC XB XB ZB ZC XC ZC XA XA XA XC ZC YB ZC XC XA XC XC YA XB YA XC ZC ZB ZA XA XA XB ZC XA XB YB ZC XB YC XB YC ZB XA XA XB ZA XA XA XB ZA XC ZC XC ZA XC YC YC ZC ZC ZA XC ZC XC ZC ZA XB ZC XC YB XB ZB ZA XC YB YC ZB ZC ZC XA ZC ZB XC XC ZC ZC XC ZC ZA XB ZC ZC XA XB ZC YC YB YC XA XA XC ZB ZC XC XC XB YC ZB XC XC ZA XA XC ZC ZC XC XC ZA XC ZC XC ZC ZA XC ZA XA XA XB ZA XB ZC ZC ZA XC ZC ZB ZC ZA YC XA XA XC XA XC XC XA YB YC ZB ZC XB YC YC XC ZA XC YB ZB YA XB YB YA XC XC XA XA YC YB ZA XB ZA YB YC ZC ZC ZA YB YB YC ZB ZC ZA XC YA XB YB ZC XC YA XB ZB ZA XB ZC YA XC XC ZC ZA XC YA XC XC XB ZB YA XC YB ZB YA XC ZA XB YA XA XA XC XA XC ZB ZC ZA XA XB YC XC YC ZA XC ZB ZA XB ZA XB YB ZC ZC ZC YC XA XC ZA YA XB ZB YA XC XC ZB ZA XC ZC XC YA XA XC ZA XA XC XC XA XC XC ZA XA XC YA YB ZC XC XB YB ZA XB ZC ZC ZA YC YC ZA XC ZA XC YC XB XB ZA XA XB ZA XC XC XA YA XA XC YB ZA XB YC XB ZC YB YA XC ZB YB ZA XB YC XC ZA XB ZA XC YC ZA XA XC YC YC XA YC ZB ZA XA YC ZC ZC ZC ZB YA YA XA XC XA XB YC ZB ZA YC XC XA YA XA XC XC ZC XA XA YC XC ZC XA XA XC ZC XA XC XC ZA XA XC ZB YA XC ZC YC ZC ZB XB ZB XA XC ZB XC ZA XC ZA YA ZB ZC XA XA XA XA XA XC ZA XB XA YA XC XA XA YA YB YC XA YA XC ZC ZC YB ZC XC ZA YC XC YC XA XB YC ZC ZA XC ZB ZB ZC XC XA XB YC XC XA XC ZB YC YC ZA XB ZC ZB YC XA XB YB ZA XC YB ZC ZC XA XC XA XB YC XA XC YB ZB ZB ZC YA XA XA YC ZB XB ZA XA XC XA XC XA XC XA XA XA XA YA YB YA XB YA XB YB ZB YA YC ZC ZC ZC ZA XC ZC XC YC ZB ZB ZB ZC YC ZB ZC XA YA XC XC YA YB YC XC XB YC ZA XC XC XC XC XC XC XB ZC YA XA XB YB ZA XC XC ZA XB XB ZC YB ZC ZC YA XC ZB YC XA XA YA XC XA YA YC ZB ZC ZC XC YB YA XC XC ZB YA XB XB ZC ZB ZB ZA XA YA XA XB ZC ZA XA YC ZC ZC YA XB ZC XC XA YA XC XC YC ZC YC XA XB ZC YB ZC XA XA XC XC ZC YC YA XA YC ZA YB YC YA YC ZB YC XA XB ZC ZA XA XB ZC XB ZC ZC ZA YA XC XA XB ZC XA XA XB YA ZB ZC XC ZC XC ZC XA XC ZB YC YC ZA XC ZA XA ZA XA XC ZA XB ZC XB ZA XC XA XC XC ZB ZA YC YC ZC ZC XC ZA XA XB YB ZC YB ZA YA XA XB ZB XA XB YB ZC XA XA XC ZB YC XB YA YA ZA XB YC XC ZC ZC YC ZA XB XC XA YA XC ZC YC XB ZA XC XC ZA XC ZA XC XC XA YC ZA XC XC ZC YA XA YA YC ZC XA XC ZA YA YA XB ZC ZB YC ZB YC XC ZB YA XA XB ZA XC ZA XA XB YA XB ZA YA XA YC ZB ZA XB XB YB ZA XA ZB YB ZC XB ZA XB ZC ZB YC XA XA YB YA YC XC XB YA YB ZC ZB ZA YA XB ZB ZA YC ZC ZB ZC XB ZB YB ZB ZA XA XC XC ZB ZA XB ZC YC ZA ZA XA XC ZA XC ZC ZC ZB ZA XA YB XA XA XA XC ZB XB XA XC ZA XB XA XA XB ZA XC ZC YA XB ZA XC ZB ZA XA XB YB YC YA XB ZC YA XC ZB ZA XC ZB ZC XB XB ZC ZA XB ZA XA XA XA XC ZB ZB YC ZA XC ZA XC XC XA XB YC XB ZA YC YB ZC YC XA XB ZC XB YA XA YB YB YA XC XC ZB ZA YA XB YC XB ZB XC YB XC XB YC XA XC ZB ZB YB YA XA XA ZB ZB ZC XC YA YC ZC XA XC ZC XB ZA YB ZC ZB ZB ZC XB ZC XC XB ZA XB YB ZA XC XA XC YA XC XB XC ZC YC ZB ZC XA XA XA YC ZC YA YC ZB ZC ZC YA XA XC XC ZC ZA ZC ZA XB ZC XC ZA XB ZC XA XA YB YC XA XA XC XC YB ZC XA XC XB ZB YA YC ZA XC ZC ZA XC YB ZA YB YB YA XA XC XC XB YC ZC ZC ZC XC YC ZB ZC ZA YC ZA XB ZB YB ZA XA XA XA XC XC ZB ZC XB ZC ZA XC XC ZB YA XC XA XB ZB ZA XA XB YC YC YC XA XB ZC YB ZA YB YB YA XB ZA XC XC ZA XB ZA YC YB ZC ZC YA XC YA XC XB ZC XA XC ZA XB YB ZC XC YB XA XB ZA XB YC XC XC YC YC XB YC ZC XB ZB YC XA YC ZC ZC XB XB YA XA XC ZC XC YA XC YA YC ZC XA XC ZC XA XB XC XC XC XB YB ZC XC ZA YB YC XC XA XB ZC ZA XC YC ZA YB ZC XC ZA XC ZB ZB YB ZA XC XA YC XC ZB YC YC ZC ZA XA XA XC ZB YC ZA XA XB ZB YB ZC ZB ZA YC YC ZB YA XA XC ZB YC ZA XC XB YA YB ZA XA XA XB YA XC ZB YC ZB YC ZC XC YC XA XA XA XC ZC XC XB YA YB ZB XC ZB YA XC YB ZC XA XA XA XA XC XB YA XA XB YA XB ZC ZA XA XA XA XB ZA XC ZC XC YB ZC ZA XC YC ZA XA XC XB ZC XB ZC ZA XA XA YB YC ZB YA XC XC ZC ZC XA XA XC ZA XA YA XA XC ZC XC XC ZC XA XC ZC ZB ZA YA YB YA XA XC XC XA XA XC XC XB YC ZA XB YA XA XA XC XC YB ZB YB ZC ZC ZC XC ZA XB ZA YC ZB ZA XC YB ZC ZC YA XB YC ZA XA XA XC ZC ZC XA YC XB ZB YA XC XC XA YA YA XB XB ZB YB YA XC YA XC ZC XC XC ZB ZB ZC YC XB ZC ZA YC YA XB ZA XC YB ZB YC ZA XA XC ZB ZB ZC ZC YC ZC ZC XA YA YB ZC ZB YC XC XA ZC ZA XA XC XA YC XA XA XA XC YA XB YA XB YA XA XA YC XC ZA XC XB YB ZB ZA YC ZC XC XB ZB ZC XB YA XB YA XA XC YB XC XA ZA ZA XC ZC YC ZC Y
A YB XC Z
module Main whereimport Data.Bifunctor (bimap, first)import Aoctype Player1 = Choicetype Player2 = Choicemain :: IO ()main = docontent <- input 2let run = Aoc.run contentrun 14264 (strategy one)run 12382 (strategy two)whereone = parse (\x -> (snd x, uncurry (flip outcome) x)) parseChoice parseChoicetwo = parse (\x -> first (decide (snd x)) x) parseChoice parseOutcomestrategy :: (String -> [(Choice, Outcome)]) -> String -> Intstrategy a = sum . map (uncurry score) . adata Choice = Rock | Paper | Scissorderiving (Eq, Ord, Show, Enum)data Outcome = Loss | Draw | Winderiving (Show, Enum)outcome :: Player1 -> Player2 -> Outcomeoutcome a b| a == b = Draw| beats a == b = Win| otherwise = Lossbeats :: Choice -> Choicebeats Rock = Scissorbeats a = pred aloses :: Choice -> Choiceloses Scissor = Rockloses a = succ achoiceScore :: Choice -> IntchoiceScore = (+1) . fromEnumoutcomeScore :: Outcome -> IntoutcomeScore = (*3) . fromEnumscore :: Choice -> Outcome -> Intscore a b = choiceScore a + outcomeScore bparseChoice :: Char -> ChoiceparseChoice 'A' = RockparseChoice 'X' = RockparseChoice 'B' = PaperparseChoice 'Y' = PaperparseChoice 'C' = ScissorparseChoice 'Z' = ScissorparseChoice _ = error "malformed input"-- for part2parseOutcome :: Char -> OutcomeparseOutcome 'X' = LossparseOutcome 'Y' = DrawparseOutcome 'Z' = WinparseOutcome _ = error "malformed input"parseTurn :: (Char -> a) -> (Char -> b) -> String -> (a, b)parseTurn a b (x : _ : y : _) = bimap a b (x, y)parse :: ((a, b) -> (Choice, Outcome)) -> (Char -> a) -> (Char -> b) -> String -> [(Choice, Outcome)]parse a b c = map (a . parseTurn b c) . linesdecide :: Outcome -> Choice -> Choicedecide Win a = loses adecide Draw a = adecide Loss a = beats a