day16/haskell: prettify findSingletonChoice

This commit is contained in:
Xiretza 2020-12-16 17:49:01 +01:00
parent d24d672f70
commit 5cbd457ebc
Signed by: xiretza
GPG Key ID: 17B78226F7139993
1 changed files with 6 additions and 5 deletions

View File

@ -66,11 +66,12 @@ resolve = sequence . map fromResolved . iterateUntilNothing resolve' . map (Choi
fromResolved _ = Nothing
findSingletonChoice :: [Resolve a] -> Maybe (a, [Resolve a])
findSingletonChoice (c@(Choice s):xs) | S.size s == 1 = let [x] = S.elems s
in Just (x, Resolved x:xs)
| otherwise = (fmap.fmap) (c:) $ findSingletonChoice xs
findSingletonChoice (x:xs) = (fmap.fmap) (x:) $ findSingletonChoice xs
findSingletonChoice _ = Nothing
findSingletonChoice [] = Nothing
findSingletonChoice (x:xs) =
case x of
Choice s | S.size s == 1 -> let [r] = S.elems s
in Just (r, Resolved r : xs)
_ -> fmap (\(r, rest) -> (r, x:rest)) $ findSingletonChoice xs
resolve' :: Ord a => [Resolve a] -> Maybe [Resolve a]
resolve' xs = do