More concise
authorUmmon <greg.burri@gmail.com>
Tue, 12 Dec 2017 13:12:18 +0000 (14:12 +0100)
committerUmmon <greg.burri@gmail.com>
Tue, 12 Dec 2017 13:12:18 +0000 (14:12 +0100)
AdventOfCode2017/Day12.fs

index 10dae1f..fded72f 100644 (file)
@@ -11,13 +11,14 @@ let parseInput (lines : string[]) : Map<int, Set<int>> =
     ) |> Map.ofArray
 
 let graphCount (g : Map<int, Set<int>>) =
-    let rec visit (current : int) (visited : Set<int>) : Set<int> =
+    let rec visit (visited : Set<int>) (current : int)  : Set<int> =
         if visited |> Set.contains current then
             Set.empty
         else
-            seq { yield g.[current]; for neighbor in g.[current] -> visit neighbor (visited |> Set.add current) } |> Set.unionMany
+            let visited' = visited.Add current
+            g.[current] + (g.[current] |> Set.map (visit visited') |> Set.unionMany)
 
     let rec nbRoots (vertices : Set<int>) =
-        if Set.isEmpty vertices then 0 else 1 + nbRoots (vertices - (visit (vertices |> Set.minElement) Set.empty))
+        if Set.isEmpty vertices then 0 else 1 + nbRoots (vertices - (visit Set.empty (vertices |> Set.minElement)))
 
-    visit 0 Set.empty |> Set.count, g |> Map.toList |> List.map fst |> Set.ofList |> nbRoots
\ No newline at end of file
+    visit Set.empty 0 |> Set.count, g |> Map.toList |> List.map fst |> Set.ofList |> nbRoots
\ No newline at end of file