private List<Funcionality> ChooseBestFunctionalities(IEnumerable<Funcionality> missingFunctionalities, Company company)
        {
            MarketReaction reaction = MarketReaction.HighGrowth;
            List<Funcionality> bestFunctionalities = new List<Funcionality>();

            while (bestFunctionalities.Count() == 0)
            {
                bestFunctionalities = missingFunctionalities.Where(func => func.MarketReaction == reaction).ToList();
                reaction--;
            }

            return bestFunctionalities;
        }
        private void Step3i(Company company)
        {
            Console.Out.WriteLine("Step3i");
            IEnumerable<Company> otherCompanies = mAllComapnies.Where(c => c != company);
            List<Funcionality> priorityFunctionalities = new List<Funcionality>();

            foreach (var otherCompany in otherCompanies)
            {
                priorityFunctionalities.AddRange(otherCompany.ImplementedFunctionalites.Except(company.ImplementedFunctionalites));
            }

            if (priorityFunctionalities.Count != 0)
            {
                priorityFunctionalities.Sort();
            }

            priorityFunctionalities = priorityFunctionalities.Distinct().ToList();

            bool leader = priorityFunctionalities.Count == 0;
            List<Funcionality> missingFunctionalities = leader ?  company.MissingFunctionalities : priorityFunctionalities;

            if (!leader)
            {
                missingFunctionalities = ChooseBestFunctionalities(missingFunctionalities, company);
            }

            var functionalitesWithCost = missingFunctionalities
                .Select(func => new { Functionality = func, Cost = company.functionalityCost(func) });

            Funcionality functionalityToDevelop = null;

            functionalityToDevelop = functionalitesWithCost
                    .First(pair => pair.Cost == functionalitesWithCost.Min(internalPair => internalPair.Cost)).Functionality;

            company.developFunctionality(functionalityToDevelop);
        }
 private void Step5i(Company company)
 {
     Console.Out.WriteLine("Step5i");
 }