// -------------------------------------------------------------------- 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()); }