Day6: Part2 works
This commit is contained in:
parent
3f8e871707
commit
cb4844bf95
24
day6.hs
24
day6.hs
|
@ -6,7 +6,8 @@ import Data.List as List
|
|||
main = do
|
||||
content <- getContents
|
||||
let ops = map parse $ lines content
|
||||
let result = toTree [("COM",0)] ops
|
||||
--let result = foldl toMap [("COM",0)] (sorted ops "COM")
|
||||
let result = toTree2 "YOU" ops 0
|
||||
mapM putStrLn (map show result)
|
||||
putStrLn $ show $ sum (map (\x-> snd x) result)
|
||||
putStrLn("Hello World")
|
||||
|
@ -15,10 +16,16 @@ toMap :: [(String,Int)] -> (String,String) -> [(String,Int)]
|
|||
toMap state (p1,p2) = state ++ [(p2, (snd value) + 1)]
|
||||
where value = (fromMaybe (p1,-1) ((Fold.find (\x -> fst x == p1) state)))
|
||||
|
||||
sorted :: [(String, String)] -> String -> [(String, String)]
|
||||
sorted input base = baseOps ++ (concat $ map (sorted input) subelems)
|
||||
where
|
||||
baseOps = filter (\(x, _) -> x == base) input
|
||||
subelems = map snd baseOps
|
||||
|
||||
toTree :: [(String,Int)] -> [(String,String)] -> [(String,Int)]
|
||||
toTree dist ops = do
|
||||
let visits = map fst dist
|
||||
let newop = (Fold.find (\x-> (elem (fst x) visits) && (notElem (snd x) visits)) ops)
|
||||
let newop = (Fold.find (\x-> (elem (fst x) visits)) ops)
|
||||
if Maybe.isNothing newop
|
||||
then dist
|
||||
else do
|
||||
|
@ -26,6 +33,19 @@ toTree dist ops = do
|
|||
let newops = List.delete (Maybe.fromJust newop) ops
|
||||
toTree newdist newops
|
||||
|
||||
toTree2 :: String -> [(String,String)] -> Int -> [(String,Int)]
|
||||
toTree2 base ops counter = do
|
||||
let rightnewop = (filter (\x-> base == fst x) ops)
|
||||
let leftnewop = (filter (\x-> base == snd x) ops)
|
||||
let newstops = (map snd rightnewop) ++ ( map fst leftnewop)
|
||||
if null rightnewop && null leftnewop
|
||||
then []
|
||||
else do
|
||||
let newcounter = counter + 1
|
||||
let newdist = (map (\x-> (x,newcounter)) newstops)
|
||||
let newops = filter(\x->notElem x (leftnewop ++ rightnewop)) ops
|
||||
newdist ++ (concat $ map (\x -> toTree2 x newops newcounter) newstops)
|
||||
|
||||
parse :: String -> (String, String)
|
||||
parse input = do
|
||||
let split = splitOn ")" input
|
||||
|
|
Loading…
Reference in New Issue
Block a user