Simplified reduce
authorNeil Smith <neil.git@njae.me.uk>
Tue, 21 Dec 2021 09:18:30 +0000 (09:18 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Tue, 21 Dec 2021 09:18:30 +0000 (09:18 +0000)
advent18/Main.hs

index 0eb9ac881be8c2393c70709ad1ca3648e4ef43f5..d9638c3f896d5ce36fdf36bb0727ee6b6529b682 100644 (file)
@@ -1,4 +1,4 @@
--- Writeup at https://work.njae.me.uk/2021/12/19/advent-of-code-2021-day-17/
+-- Writeup at https://work.njae.me.uk/2021/12/21/advent-of-code-2021-day-18/
 
 import Data.Text ()
 import qualified Data.Text.IO as TIO
@@ -8,7 +8,11 @@ import Data.Maybe
 import Data.List
 
 data Tree = Pair Tree Tree | Leaf Int
-  deriving (Show, Eq)
+  deriving (Eq)
+
+instance Show Tree where
+  show (Leaf n) = show n
+  show (Pair l r) = "[" ++ show l ++ "," ++ show r ++ "]"
 
 data Cxt = Top | L Cxt Tree | R Tree Cxt
   deriving (Show, Eq)
@@ -129,16 +133,10 @@ splittableC t@(Leaf n, _)
   | otherwise = Nothing
 splittableC t@(Pair _ _, _) = splittableC (left t) <|> splittableC (right t)
 
-
 reduce :: Tree -> Tree
-reduce num = splt
-  where 
-    expl = case (explode num) of
-            Nothing -> num
-            Just eres -> reduce eres
-    splt = case (split expl) of
-            Nothing -> expl
-            Just sres -> reduce sres
+reduce num = case explode num <|> split num of
+  Nothing -> num
+  Just num1 -> reduce num1
 
 snailAdd :: Tree -> Tree -> Tree
 snailAdd a b = reduce $ Pair a b