Beispiel #1
0
        public string CraftPresent(string presentName)
        {
            Workshop workshop          = new Workshop();
            IPresent present           = this.presentRepository.FindByName(presentName);
            var      dwarfsReadyToWork = this.dwarfRepository
                                         .Models
                                         .Where(x => x.Energy >= 50)
                                         .OrderByDescending(x => x.Energy)
                                         .ToList();

            if (!dwarfsReadyToWork.Any())
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }

            foreach (IDwarf dwarf in dwarfsReadyToWork)
            {
                workshop.Craft(present, dwarf);
                if (dwarf.Energy <= 0)
                {
                    this.dwarfRepository.Remove(dwarf);
                }
                if (present.IsDone())
                {
                    break;
                }
            }

            string output = string.Format(present.IsDone() ?
                                          OutputMessages.PresentIsDone :
                                          OutputMessages.PresentIsNotDone, presentName);

            return(output);
        }
Beispiel #2
0
        public string CraftPresent(string presentName)
        {
            IPresent      present            = this.presents.FindByName(presentName);
            List <IDwarf> dwarfsReadyToCraft = this.dwarfs.Models
                                               .Where(x => x.Energy >= 50)
                                               .OrderByDescending(x => x.Energy)
                                               .ToList();
            StringBuilder sb = new StringBuilder();

            if (dwarfsReadyToCraft.Count == 0)
            {
                throw new InvalidOperationException("There is no dwarf ready to start crafting!");
            }
            foreach (var dwarf in dwarfsReadyToCraft)
            {
                this.workshop.Craft(present, dwarf);
                if (present.IsDone())
                {
                    break;
                }
            }
            sb.Append($"Present { present.Name} is ");
            if (present.IsDone())
            {
                sb.Append("done.");
            }
            else
            {
                sb.Append("not done.");
            }
            RemoveDrawfsFromCollection(dwarfsReadyToCraft);
            return(sb.ToString().TrimEnd());
        }
Beispiel #3
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            IInstrument instrument = null;

            while (dwarf.Energy > 0 && dwarf.Instruments.Any(x => x.Power > 0))
            {
                instrument = dwarf.Instruments.FirstOrDefault(x => x.Power > 0);

                while (!present.IsDone() && dwarf.Energy > 0 && !instrument.IsBroken())
                {
                    dwarf.Work();
                    instrument.Use();
                    present.GetCrafted();
                }

                if (instrument.IsBroken())
                {
                    dwarf.Instruments.Remove(instrument);
                }

                if (present.IsDone())
                {
                    break;
                }
            }
        }
Beispiel #4
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            while (dwarf.Energy > DwarfMinEnergy && dwarf.Instruments.Any())
            {
                var currentInstrument = dwarf.Instruments.First();

                while (!present.IsDone() && dwarf.Energy > DwarfMinEnergy &&
                       !currentInstrument.IsBroken())
                {
                    dwarf.Work();
                    present.GetCrafted();
                    currentInstrument.Use();
                }

                if (currentInstrument.IsBroken())
                {
                    dwarf.Instruments.Remove(currentInstrument);
                }

                if (present.IsDone())
                {
                    break;
                }
            }
        }
        public void Craft(IPresent present, IDwarf dwarf)
        {
            while (dwarf.Energy > 0 && dwarf.Instruments.Any()) // итерираме между инструментите
            {
                IInstrument currInstrument = dwarf.Instruments.First();

                while (!present.IsDone() && dwarf.Energy > 0 && !currInstrument.IsBroken()) // правим подаръка
                {
                    dwarf.Work(); // намаляме енергията
                    present.GetCrafted(); // намаляме необходимото за правенето на подаръка
                    currInstrument.Use(); // намаляме здравето на инструмента
                }

                if (currInstrument.IsBroken()) //ако заедно с направата на подарък се е счупил и инструмента !!!!
                {
                    dwarf.Instruments.Remove(currInstrument);
                }

                if (present.IsDone()) //подаръка е готов и излизаме
                {
                    break;
                }

            }
        }
        public void Craft(IPresent present, IDwarf dwarf)
        {
            while (!present.IsDone() || dwarf.Energy > 0)
            {
                foreach (var instrument in dwarf.Instruments)
                {
                    if (!instrument.IsBroken())
                    {
                        instrument.Use();
                        present.GetCrafted();

                        if (instrument.Power <= 0)
                        {
                            instrument.IsBroken();
                        }

                        if (present.IsDone())
                        {
                            break;
                        }
                        else
                        {
                            instrument.Use();
                            present.GetCrafted();
                        }
                    }
                }
            }
        }
Beispiel #7
0
        public string CraftPresent(string presentName)
        {
            Workshop workshop = new Workshop();

            IPresent present = this.presents.FindByName(presentName); // намираме подаръка

            ICollection <IDwarf> dwarves = this.dwarfs.Models.Where(dw => dw.Energy >= 50).OrderByDescending(dw => dw.Energy).ToList();

            // намираме тези дуорфи, които имат енергия над 50 и ги подреждаме по нея

            if (!dwarves.Any()) // ако е празна колекцията
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }

            while (dwarves.Any())
            {
                IDwarf currDwarf = dwarves.First();

                workshop.Craft(present, currDwarf);

                if (!currDwarf.Instruments.Any()) // ако му свършат инструментите
                {
                    dwarves.Remove(currDwarf);    //махаме го само от локалната колекция !!!
                }

                if (currDwarf.Energy == 0) //ако му свърши енергията
                {
                    dwarves.Remove(currDwarf);
                    this.dwarfs.Remove(currDwarf); // премахваме го от двете колекции
                }

                if (present.IsDone())
                {
                    break;
                }
            }



            //string result;

            //if (present.IsDone())
            //{
            //    result = string.Format(OutputMessages.PresentIsDone, presentName);
            //}
            //else
            //{
            //    result = string.Format(OutputMessages.PresentIsNotDone, presentName);
            //}

            //return result;

            string result = string.Format(present.IsDone() ? OutputMessages.PresentIsDone : OutputMessages.PresentIsNotDone, presentName);

            return(result);
        }
Beispiel #8
0
        public string CraftPresent(string presentName)
        {
            IPresent present = this.presents.FindByName(presentName);
            IDwarf   dwarf   = dwarves.Models
                               .Where(d => d.Energy >= 50)
                               .OrderByDescending(d => d.Energy)
                               .FirstOrDefault(d => d.Instruments.Count > 0);

            Workshop workshop = new Workshop();

            while (dwarves.Models.Any(d => d.Energy >= 50))
            {
                if (dwarf == null)
                {
                    throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
                }

                workshop.Craft(present, dwarf);

                if (dwarf.Energy == 0)
                {
                    this.dwarves.Remove(dwarf);
                }

                if (present.IsDone())
                {
                    break;
                }

                if (!dwarf.Instruments.Any(i => i.Power > 0))
                {
                    break;
                }
            }

            string result;

            if (present.IsDone())
            {
                result = string.Format(OutputMessages.PresentIsDone, presentName);
            }
            else
            {
                result = string.Format(OutputMessages.PresentIsNotDone, presentName);
            }

            return(result);
        }
        public string CraftPresent(string presentName)
        {
            IPresent present     = presentRepository.FindByName(presentName);
            var      dwarfsReady = dwarfRepository.Models.OrderByDescending(x => x.Energy).Where(x => x.Energy >= 50).ToList();
            var      workShop    = new Workshop();

            if (!dwarfsReady.Any())
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }

            while (dwarfsReady.Any())
            {
                IDwarf currentDwarf = dwarfsReady.First();

                workShop.Craft(present, currentDwarf);

                dwarfsReady.Remove(currentDwarf);
            }

            if (present.IsDone())
            {
                return(string.Format(OutputMessages.PresentIsDone, present.Name));
            }

            else
            {
                return(string.Format(OutputMessages.PresentIsNotDone, present.Name));
            }
        }
Beispiel #10
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            var instruments = dwarf.Instruments.ToList();

            while (true)
            {
                if (dwarf.Energy <= 0 || present.IsDone())
                {
                    break;
                }

                if (instruments[0].IsBroken())
                {
                    dwarf.Instruments.Remove(instruments[0]);
                    instruments.RemoveAt(0);

                    if (instruments.Count > 0)
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }

                instruments[0].Use();
                dwarf.Work();
                present.GetCrafted();
            }
        }
Beispiel #11
0
 public void Craft(IPresent present, IDwarf dwarf)
 {
     while (!present.IsDone() && dwarf.Instruments.Any(x => !x.IsBroken()))
     {
         present.GetCrafted();
         dwarf.Instruments.FirstOrDefault(x => x.IsBroken() == false).Use();
     }
 }
Beispiel #12
0
 public void Craft(IPresent present, IDwarf dwarf)
 {
     while (dwarf.Energy > 0 && dwarf.Instruments.Sum(el => el.Power) > 0 && !present.IsDone())
     {
         dwarf.Work();
         dwarf.Instruments.First(el => !el.IsBroken()).Use();
         present.GetCrafted();
     }
 }
Beispiel #13
0
        public string CraftPresent(string presentName)
        {
            Workshop workshop = new Workshop();

            IPresent present = this.presents.FindByName(presentName);

            ICollection <IDwarf> dwarves = this.dwarfs
                                           .Models
                                           .Where(x => x.Energy >= 50)
                                           .OrderByDescending(x => x.Energy)
                                           .ToList();

            if (!dwarves.Any())
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }

            while (dwarves.Any())
            {
                IDwarf currentDwarf = dwarves.First();

                workshop.Craft(present, currentDwarf);

                if (!currentDwarf.Instruments.Any())
                {
                    dwarves.Remove(currentDwarf);
                }

                if (currentDwarf.Energy == 0)
                {
                    dwarves.Remove(currentDwarf);
                    this.dwarfs.Remove(currentDwarf);
                }

                if (present.IsDone())
                {
                    break;
                }
            }

            string output = string.Format(present.IsDone() ? OutputMessages.PresentIsDone : OutputMessages.PresentIsNotDone, presentName);

            return(output);
        }
Beispiel #14
0
        public string CraftPresent(string presentName)
        {
            IPresent present = this.presents.FindByName(presentName);



            ICollection <IDwarf> sortedDwarfs = this.dwarfs.Models.Where(x => x.Energy >= 0).OrderByDescending(x => x.Energy).ToList();

            if (!sortedDwarfs.Any())
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }

            while (sortedDwarfs.Any())
            {
                var dwarfThatCraft = sortedDwarfs.FirstOrDefault();

                Workshop workshop = new Workshop();

                workshop.Craft(present, dwarfThatCraft);

                if (!dwarfThatCraft.Instruments.Any())
                {
                    sortedDwarfs.Remove(dwarfThatCraft);
                }

                if (dwarfThatCraft.Energy == 0)
                {
                    sortedDwarfs.Remove(dwarfThatCraft);
                    this.dwarfs.Remove(dwarfThatCraft);
                }

                if (present.IsDone())
                {
                    break;
                }
            }
            var result = present.IsDone() ? string.Format(OutputMessages.PresentIsDone, presentName) : string.Format(OutputMessages.PresentIsNotDone, presentName);

            return(result);
        }
        public string CraftPresent(string presentName)
        {
            IWorkshop workshop    = new Workshop();
            IPresent  present     = this.presents.FindByName(presentName);
            var       readyDwarfs = this.dwarfs.Models.Where(d => d.Energy >= 50).OrderByDescending(a => a.Energy).ToList();

            if (readyDwarfs.Count > 0)
            {
                for (int i = 0; i < readyDwarfs.Count;)
                {
                    workshop.Craft(present, readyDwarfs[i]);

                    if (readyDwarfs[i].Energy == 0)
                    {
                        this.dwarfs.Remove(readyDwarfs[i]);
                        i++;
                    }
                    if (present.IsDone())
                    {
                        break;
                    }
                    if (!present.IsDone() || readyDwarfs[i].Instruments.Count == 0)
                    {
                        i++;
                    }
                }
            }
            else
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }

            if (present.IsDone())
            {
                return($"Present {presentName} is done.");
            }
            else
            {
                return($"Present {presentName} is not done.");
            }
        }
Beispiel #16
0
        //The dwarf starts crafting the present.This is only possible,
        //if the dwarf has energy and an instrument that isn't broken.
        //At the same time the present is getting crafted, so call the GetCrafted() method for the present.
        //Keep working until the present is done or the dwarf has energy and instruments to use.
        //If at some point the power of the current instrument reaches or drops below 0,
        //meaning it is broken, then the dwarf should take the next instrument from its collection, if it has any left.


        public void Craft(IPresent present, IDwarf dwarf)
        {
            if (dwarf.Energy > 0 && dwarf.Instruments.Any(i => i.Power > 0))
            {
                while ((dwarf.Energy > 0 && dwarf.Instruments.Any(i => i.Power > 0)) ||
                       !present.IsDone())
                {
                    dwarf.Work();
                    present.GetCrafted();
                }
            }
        }
Beispiel #17
0
 public void Craft(IPresent present, IDwarf dwarf)
 {
     while (dwarf.Energy > 0 && dwarf.Instruments.Count != 0)
     {
         IInstrument currentInstrument = dwarf.Instruments.First(i => !i.IsBroken());
         while (dwarf.Energy > 0 && currentInstrument.IsBroken() == false && present.IsDone() == false)
         {
             dwarf.Work();
             present.GetCrafted();
             currentInstrument.Use();
         }
         if (currentInstrument.IsBroken())
         {
             dwarf.Instruments.Remove(currentInstrument);
         }
         if (present.IsDone())
         {
             break;
         }
     }
 }
Beispiel #18
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            while (dwarf.Energy > 0 && dwarf.Instruments.Any())
            {
                IInstrument currInstrument = dwarf.Instruments.First();
                while (!present.IsDone() && dwarf.Energy > 0 && !currInstrument.IsBroken())
                {
                    dwarf.Work();
                    present.GetCrafted();
                    currInstrument.Use();
                }

                if (currInstrument.IsBroken())
                {
                    dwarf.Instruments.Remove(currInstrument);
                }

                if (present.IsDone())
                {
                    break;
                }
            }

            //public void Craft(IPresent present, IDwarf dwarf)
            //{
            //    var currInstrument = dwarf.Instruments.FirstOrDefault(i => !(i.IsBroken()));
            //    if (dwarf.Energy > 0 && currInstrument != null)
            //    {
            //        dwarf.Work();
            //        present.GetCrafted();
            //        currInstrument.Use();
            //    }

            //    if (!present.IsDone() && dwarf.Energy > 0 && dwarf.Instruments.Any())
            //    {
            //        this.Craft(present, dwarf);
            //    }
            //}
        }
Beispiel #19
0
 public void Craft(IPresent present, IDwarf dwarf)
 {
     while (dwarf.Energy > 0 || !present.IsDone() || dwarf.Instruments.Any(x => !x.IsBroken()))
     {
         foreach (var instrument in dwarf.Instruments)
         {
             while (!instrument.IsBroken())
             {
                 instrument.Use();
                 dwarf.Work();
                 present.GetCrafted();
             }
         }
     }
 }
Beispiel #20
0
 public void Craft(IPresent present, IDwarf dwarf)
 {
     foreach (var instrument in dwarf.Instruments)
     {
         while (!instrument.IsBroken())
         {
             if (dwarf.Energy == 0)
             {
                 break;
             }
             present.GetCrafted();
             dwarf.Work();
             instrument.Use();
             if (present.IsDone())
             {
                 break;
             }
         }
         if (present.IsDone())
         {
             break;
         }
     }
 }
Beispiel #21
0
        public string CraftPresent(string presentName)
        {
            IPresent             present         = this.presents.Models.FirstOrDefault(p => p.Name == presentName);
            ICollection <IDwarf> suitableDwarves = this.dwarfs.Models.Where(d => d.Energy >= 50).OrderByDescending(d => d.Energy).ToList();

            if (suitableDwarves.Count == 0)
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }
            Workshop workshop = new Workshop();

            while (suitableDwarves.Any())
            {
                IDwarf currentDwarf = suitableDwarves.First();
                workshop.Craft(present, currentDwarf);
                if (currentDwarf.Instruments.Count == 0)
                {
                    suitableDwarves.Remove(currentDwarf);
                }
                if (currentDwarf.Energy == 0)
                {
                    suitableDwarves.Remove(currentDwarf);
                    this.dwarfs.Remove(currentDwarf);
                }
                if (present.IsDone())
                {
                    break;
                }
            }
            if (present.IsDone())
            {
                craftedPresentsCount++;
                return(String.Format(OutputMessages.PresentIsDone, presentName));
            }
            return(String.Format(OutputMessages.PresentIsNotDone, presentName));
        }
        public void Craft(IPresent present, IDwarf dwarf)
        {
            if (dwarf.Energy > 0 && dwarf.Instruments.Any(i => i.IsBroken() == false))
            {
                while (true)
                {
                    if (present.IsDone() || dwarf.Energy <= 0 || dwarf.Instruments.All(i => i.IsBroken()))
                    {
                        break;
                    }

                    present.GetCrafted();
                    dwarf.Work();
                }
            }
        }
Beispiel #23
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            var instrument = dwarf.Instruments.FirstOrDefault(x => x.IsBroken() == false);

            while (present.IsDone() == false && dwarf.Energy > 0 && instrument != null)
            {
                present.GetCrafted();
                instrument.Use();
                dwarf.Work();


                if (instrument.IsBroken())
                {
                    instrument = dwarf.Instruments.FirstOrDefault(x => x.IsBroken() == false);
                }
            }
        }
Beispiel #24
0
 public void Craft(IPresent present, IDwarf dwarf)
 {
     while (!present.IsDone() && dwarf.Energy != 0)
     {
         var currInstrument = dwarf.Instruments.FirstOrDefault(x => !(x.IsBroken()));
         if (currInstrument != null && !currInstrument.IsBroken())
         {
             dwarf.Work();
             currInstrument.Use();
             present.GetCrafted();
         }
         else
         {
             break;
         }
     }
 }
        public void Craft(IPresent present, IDwarf dwarf)
        {
            while (true)
            {
                var currentInstrument = dwarf.Instruments.FirstOrDefault();

                while (dwarf.Energy > 0 && currentInstrument.IsBroken() == false && present.IsDone() == false)
                {
                    dwarf.Work();
                    present.GetCrafted();
                }

                if (currentInstrument.IsBroken())
                {
                    dwarf.Instruments.Remove(currentInstrument);
                }
            }
        }
Beispiel #26
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            var currentInstrument = dwarf.Instruments.FirstOrDefault(x => x.Power > 0);

            while (dwarf.Energy > 0 && dwarf.Instruments.Any(x => x.Power > 0))
            {
                dwarf.Work();
                currentInstrument.Use();
                present.GetCrafted();

                if (currentInstrument.IsBroken())
                {
                    currentInstrument = dwarf.Instruments.FirstOrDefault(x => x.Power > 0);
                }
                if (present.IsDone())
                {
                    break;
                }
            }
        }
Beispiel #27
0
        public string CraftPresent(string presentName)
        {
            var readyToWorkdwarfs = new List <IDwarf>();

            foreach (var dwarf in dwarfs.Models)
            {
                if (dwarf.Energy >= 50 && dwarf.Instruments.Any(x => x.IsBroken() == false))
                {
                    readyToWorkdwarfs.Add(dwarf);
                }
            }
            if (readyToWorkdwarfs == null)
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }
            present = presents.FindByName(presentName);
            foreach (var currentDwarf in readyToWorkdwarfs)
            {
                //readyToWorkdwarfs = dwarfs.Models.Where(x => x.Energy >= 50);
                currentDwarf.Work();
                var currentInstrument = currentDwarf.Instruments.FirstOrDefault(x => x.IsBroken() == false);
                //currentInstrument.Use();
                if (currentInstrument.IsBroken())
                {
                    brokenOnes++;
                }
                present.GetCrafted();
                workshop.Craft(present, currentDwarf);
                if (currentDwarf.Energy == 0)
                {
                    dwarfs.Remove(currentDwarf);
                }
                if (present.IsDone())
                {
                    countCraftedPresents++;
                    return(string.Format(OutputMessages.PresentIsDone, presentName));
                }
            }
            return(string.Format(OutputMessages.PresentIsNotDone, presentName));
        }
Beispiel #28
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            if (dwarf.Instruments.Count == 0 || dwarf.Energy == 0)
            {
                return;
            }

            while (true)
            {
                present.GetCrafted();
                dwarf.Work();
                var instrument = dwarf.Instruments.FirstOrDefault();
                instrument.Use();

                if (present.IsDone())
                {
                    break;
                }


                if (dwarf.Energy == 0)
                {
                    break;
                }

                if (instrument.IsBroken())
                {
                    dwarf.Instruments.Remove(instrument);

                    instrument = dwarf.Instruments.FirstOrDefault();

                    if (instrument == null)
                    {
                        break;
                    }
                }
            }
        }
Beispiel #29
0
        public string CraftPresent(string presentName)
        {
            List <IDwarf> readyToWorkDwarves = dwarfs.Models.Where(el => el.Energy >= 50).OrderByDescending(el => el.Energy).ToList();
            IPresent      present            = presents.FindByName(presentName);

            if (readyToWorkDwarves.Count == 0)
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }
            foreach (var dwarf in readyToWorkDwarves)
            {
                workshop.Craft(present, dwarf);
                if (dwarf.Energy == 0)
                {
                    dwarfs.Remove(dwarf);
                }
                if (present.IsDone())
                {
                    return(string.Format(OutputMessages.PresentIsDone, presentName));
                }
            }
            return(string.Format(OutputMessages.PresentIsNotDone, presentName));
        }
Beispiel #30
0
        public void Craft(IPresent present, IDwarf dwarf)
        {
            while (true)
            {
                if (dwarf.Energy > 0 && dwarf.Instruments.Any(i => !i.IsBroken()))
                {
                    var instrument = dwarf.Instruments.FirstOrDefault(x => !x.IsBroken());
                    instrument.Use();
                    dwarf.Work();
                    present.GetCrafted();

                    if (present.IsDone())
                    {
                        return;
                    }
                }

                else
                {
                    return;
                }
            }
        }