From f4779601c4b732757d75e538a7302869694707b8 Mon Sep 17 00:00:00 2001 From: Gattix Date: Wed, 14 Dec 2022 01:57:16 +0100 Subject: [PATCH] day13 --- 2022/day13/day13.hs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/2022/day13/day13.hs b/2022/day13/day13.hs index 991c496..d80fcde 100644 --- a/2022/day13/day13.hs +++ b/2022/day13/day13.hs @@ -7,8 +7,7 @@ main :: IO () main = do let toDigit = T.unpack . T.replace (T.pack "10") (T.pack ":") . T.pack input <- map (map toDigit . lines) . splitOn "\n\n" <$> readFile "input" - print $ - sum $ zipWith (*) [1 ..] $ map (fromEnum . isOrdered 0) input + print $ sum $ zipWith (*) [1 ..] $ map (fromEnum . isOrdered 0) input let divider = ["[[6]]", "[[2]]"] let sorted = sortBy mySort (divider ++ concat input) print $ product $ map (+ 1) $ mapMaybe (`elemIndex` sorted) divider @@ -30,19 +29,20 @@ isOrdered _ [_, []] = False isOrdered _ _ = True addBrackets :: [String] -> [String] -> [String] -addBrackets [accl,accr] [l:ls,r:rs] - | l == r = addBrackets [l:accl,r:accr] [ls,rs] - | l `elem` ['0'..':'] && r `elem` ['0' .. ':'] = addBrackets [l:accl,r:accr] [ls,rs] - | l == '[' = addBrackets [l:accl,l:accr] [ls,r:rs] - | r == '[' = addBrackets [r:accl,r:accr] [l:ls,rs] - | l == ']' = addBrackets [accl,r:accr] [l:ls,rs] - | r == ']' = addBrackets [l:accl,accr] [ls,r:rs] -addBrackets [accl,accr] ["",rs]= map reverse [accl,reverse rs ++ accr] -addBrackets [accl,accr] [ls,""] = map reverse [reverse ls ++ accl,accr] +addBrackets [accl, accr] [l:ls, r:rs] + | l == r = addBrackets [l : accl, r : accr] [ls, rs] + | l `elem` ['0' .. ':'] && r `elem` ['0' .. ':'] = + addBrackets [l : accl, r : accr] [ls, rs] + | l == '[' = addBrackets [l : accl, l : accr] [ls, r : rs] + | r == '[' = addBrackets [r : accl, r : accr] [l : ls, rs] + | l == ']' = addBrackets [accl, r : accr] [l : ls, rs] + | r == ']' = addBrackets [l : accl, accr] [ls, r : rs] +addBrackets [accl, accr] ["", rs] = map reverse [accl, reverse rs ++ accr] +addBrackets [accl, accr] [ls, ""] = map reverse [reverse ls ++ accl, accr] addBrackets _ acc = map reverse acc mySort :: String -> String -> Ordering mySort x y = - if isOrdered 0 (addBrackets ["",""] [x, y]) + if isOrdered 0 (addBrackets ["", ""] [x, y]) then LT else GT