コード例 #1
0
        public override string Solve(Bomb bomb)
        {
            var      message      = "";
            Solution acidSolution = Solutions.First(x => x.Color == Color);
            Solution baseSolution;

            //Defining base to add
            if (bomb.HasLitIndicator("NSA") && bomb.HasExactlyBatteries(3))
            {
                baseSolution = Solutions.First(x => x.Name == "ammonia");
            }
            else if (bomb.HasLitIndicator("CAR") || bomb.HasLitIndicator("FRQ") || bomb.HasLitIndicator("IND"))
            {
                baseSolution = Solutions.First(x => x.Name == "potassium hydroxide");
            }
            else if (!bomb.HasManyPorts(1) && bomb.HasSerialVowel())
            {
                baseSolution = Solutions.First(x => x.Name == "lythium hydroxide");
            }
            else if (bomb.HasIndicatorWithLetterInWord(acidSolution.Formula))
            {
                baseSolution = Solutions.First(x => x.Name == "potassium hydroxide");
            }
            else if (bomb.GetDBatteries() > bomb.GetAABatteries())
            {
                baseSolution = Solutions.First(x => x.Name == "ammonia");
            }
            else if (acidSolution.AnionAtomicNumber < 20)
            {
                baseSolution = Solutions.First(x => x.Name == "sodium hydroxide");
            }
            else
            {
                baseSolution = Solutions.First(x => x.Name == "lythium hydroxide");
            }

            message += baseSolution.Message;

            //Defining acid concentration
            double acidConcentration = 0;

            acidConcentration += acidSolution.AnionAtomicNumber;
            acidConcentration -= baseSolution.CationAtomicNumber;
            if (InternalFunctions.HasVowelInWord(acidSolution.AnionFormula) || InternalFunctions.HasVowelInWord(baseSolution.CationFormula))
            {
                acidConcentration -= 4;
            }
            if (acidSolution.AnionFormula.Length == baseSolution.CationFormula.Length)
            {
                acidConcentration *= 3;
            }
            acidConcentration = InternalFunctions.GetNumber(acidConcentration.ToString().Last().ToString());
            if (acidConcentration == 0)
            {
                acidConcentration = Volume * 2 / 5;
            }
            acidConcentration /= 10;

            //Defining base concentration
            double baseConcentration = 0;

            if (bomb.GetBatteriesHolders() > bomb.GetPortsQuantity() && bomb.GetBatteriesHolders() > bomb.GetIndicators())
            {
                baseConcentration = 5;
            }
            if (bomb.GetPortTypesQuantity() > bomb.GetBatteriesHolders() && bomb.GetPortTypesQuantity() > bomb.GetIndicators())
            {
                baseConcentration = 10;
            }
            if (bomb.GetIndicators() > bomb.GetBatteriesHolders() && bomb.GetIndicators() > bomb.GetPortTypesQuantity())
            {
                baseConcentration = 20;
            }
            if (bomb.GetBatteriesHolders() == bomb.GetPortTypesQuantity() && bomb.GetPortTypesQuantity() == bomb.GetIndicators())
            {
                var difference5  = Math.Abs(5 - baseSolution.CationAtomicNumber);
                var difference10 = Math.Abs(10 - baseSolution.CationAtomicNumber);
                var difference20 = Math.Abs(20 - baseSolution.CationAtomicNumber);

                if (difference5 < difference10 && difference5 < difference20)
                {
                    baseConcentration = 5;
                }
                if (difference10 < difference5 && difference10 < difference20)
                {
                    baseConcentration = 10;
                }
                if (difference20 < difference5 && difference20 < difference10)
                {
                    baseConcentration = 20;
                }
            }

            if ((acidSolution.Formula == "HI" && baseSolution.Formula == "KOH") || (acidSolution.Formula == "HCl" && baseSolution.Formula == "NH3"))
            {
                baseConcentration = 20;
            }

            //Defining drops
            double drops = 20;

            drops   /= baseConcentration;
            drops   *= Volume;
            drops   *= acidConcentration;
            message += $"{(int)drops} drops. ";

            //Defining filter
            switch (acidSolution.Formula)
            {
            case "HBr":
                if (baseSolution.Formula == "NH3" || baseSolution.Formula == "NaOH")
                {
                    message += "Filter off.";
                }
                else
                {
                    message += "Filter on.";
                }
                break;

            case "HF":
                if (baseSolution.Formula == "KOH" || baseSolution.Formula == "NaOH")
                {
                    message += "Filter off.";
                }
                else
                {
                    message += "Filter on.";
                }
                break;

            case "HCl":
                if (baseSolution.Formula == "LiOH")
                {
                    message += "Filter off.";
                }
                else
                {
                    message += "Filter on.";
                }
                break;

            case "HI":
                if (baseSolution.Formula != "NaOH")
                {
                    message += "Filter off.";
                }
                else
                {
                    message += "Filter on.";
                }
                break;
            }

            Solved = true;

            return(message);
        }