--- Writeup at https://work.njae.me.uk/2021/12/29/advent-of-code-2021-day-24/
+-- Writeup at https://work.njae.me.uk/2022/04/23/advent-of-code-2021-day-24/
-- Based on ideas by Daniel Lin,
-- taken from https://github.com/ephemient/aoc2021/blob/main/hs/src/Day24.hs
-import Debug.Trace
+-- import Debug.Trace
import Data.Text (Text)
import qualified Data.Text.IO as TIO
import Data.Attoparsec.Text -- hiding (take, takeWhile)
import Control.Applicative
-import qualified Data.Map as M
-import Data.Map ((!))
+import qualified Data.Map.Strict as M
+import Data.Map.Strict ((!))
import Data.List
import Control.Monad
import Data.Maybe
registerP, wP, xP, yP, zP :: Parser Register
registerP = choice [wP, xP, yP, zP]
-wP = "w" *> pure W
-xP = "x" *> pure X
-yP = "y" *> pure Y
-zP = "z" *> pure Z
+wP = W <$ "w"
+xP = X <$ "x"
+yP = Y <$ "y"
+zP = Z <$ "z"
argumentP :: Parser Argument
argumentP = (Reg <$> registerP) <|> (Lit <$> signed decimal)