Exemplo n.º 1
0
        static void Main()
        {
            Day07.steps = new Dictionary <char, Step>();
            Day07.ReadInput();

            int extraTime   = 60;
            int workerLimit = 5;

            int simultaneousSteps = 0;
            int totalTime         = 0;

            while (Day07.steps.Count > 0)
            {
                Step s;
                while ((simultaneousSteps < workerLimit) && ((s = Day07.GetNextAvailableStep()) != null))
                {
                    Console.Write(s.name);
                    s.timeUntilDone    = extraTime + (Convert.ToByte(s.name) - Convert.ToByte('A') + 1);
                    simultaneousSteps += 1;
                }

                Day07.AdvanceSteps();

                while ((s = Day07.GetNextFinishedStep()) != null)
                {
                    Day07.steps.Remove(s.name);
                    foreach (KeyValuePair <char, Step> entry in s.descendants)
                    {
                        entry.Value.RemoveRequirement(s);
                    }

                    simultaneousSteps -= 1;
                }

                totalTime += 1;
            }

            Console.WriteLine("");
            Console.WriteLine("Part 2 time: " + totalTime);
        }