Exemple #1
0
        private static ProgramPathCollection <int> Part0(string input)
        {
            var paths = new ProgramPathCollection <int>();

            foreach (var line in input.Lines())
            {
                var words = line.Words().ToList();

                var key = words[0].ToInt();
                var cdr = words.Skip(2).Select(x => x.Trim(',')).ToInts();

                paths.AddPath(key, cdr);
            }

            return(paths);
        }
Exemple #2
0
        private static HashSet <int> GetGroupFor(ProgramPathCollection <int> paths, HashSet <int> seen, int key)
        {
            seen.Add(key);

            foreach (var i in paths.GetValue(key))
            {
                if (seen.Contains(i))
                {
                    continue;
                }

                foreach (var h in GetGroupFor(paths, seen, i))
                {
                    seen.TryAdd(h);
                }
            }

            return(seen);
        }
Exemple #3
0
        private static IList <HashSet <int> > GetGroups(ProgramPathCollection <int> paths)
        {
            var response = new List <HashSet <int> >();

            IList <int> left = new List <int>();
            var         seen = new HashSet <int>();

            do
            {
                var hash = GetGroupFor(paths, new HashSet <int>(), left.FirstOrDefault());

                seen.UnionWith(hash);

                response.Add(hash);
                left = paths.Paths.Where(x => !seen.Contains(x)).ToList();
            } while (left.Count > 0);

            return(response);
        }