// -------------------------------------------------------------------- public string PuzzleB(StepRules rules, int availableWorkers, int timeAdder = 0) { int seconds = 0; var wp = new WorkProcessor(availableWorkers); wp.TimeAdder = timeAdder; List <string> ready; while (true) { ready = rules.GetReadySteps(); wp.LoadWorkQueue(ref ready); if (wp.IsTaskQueueEmpty()) { break; } var completed = wp.ProcessQueue(); seconds++; rules.RemoveDependencies(completed); } return(seconds.ToString()); }
// -------------------------------------------------------------------- public async Task <StepRules> LoadStepRules() { var data = await GetInput(DATANAME); var rules = new StepRules(); foreach (var d in data) { rules.AddRule(d); } return(rules); }
// -------------------------------------------------------------------- public string PuzzleA(StepRules rules) { var sequence = new List <string>(); while (true) { var ready = rules.GetNextReadyStep(); if (String.IsNullOrEmpty(ready)) { break; } sequence.Add(ready); rules.RemoveDependency(ready); } return(String.Join(String.Empty, sequence)); }