day13
This commit is contained in:
parent
b4855cb88e
commit
f4779601c4
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user