コード例 #1
0
ファイル: Chess.cs プロジェクト: 1537592846/ktane-bomb-manual
        public override string Command(Bomb bomb, string command)
        {
            var row    = -1;
            var column = -1;

            foreach (var word in command.Split(' '))
            {
                if (InternalFunctions.GetLetterFromPhoneticLetter(word) != "")
                {
                    column = InternalFunctions.GetNumberFromLetter(InternalFunctions.GetLetterFromPhoneticLetter(word)) - 1;
                }
                if (InternalFunctions.IsNumber(word))
                {
                    row = int.Parse(word) - 1;
                }
                if (row != -1 && column != -1)
                {
                    Positions.Add(InternalFunctions.GetPhoneticLetterFromLetter(InternalFunctions.GetLetterFromNumber(column + 1)) + '-' + (row + 1));
                    row    = -1;
                    column = -1;
                }
            }

            return(Solve(bomb));
        }
コード例 #2
0
        public override string Solve(Bomb bomb)
        {
            SetInitialPosition(bomb);

            if (StartPosition == null)
            {
                return("Cut all the wires on descending numeral order.");
            }

            var result = "Cut wires ";
            var letter = bomb.GetSerialCharacters()[0];

            while (!StartPosition.Resolved)
            {
                if (!StartPosition.Previous.Resolved || (ReversedOrder && !StartPosition.Next.Resolved))
                {
                    result += StartPosition.Start + "-" + StartPosition.End + ", ";
                    StartPosition.Resolved    = true;
                    StartPosition.ShouldBeCut = true;
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                    }
                    continue;
                }

                switch (letter.ToUpper())
                {
                case "A":
                case "N":
                {
                    if (StartPosition.Previous.Color != "yellow" && StartPosition.Previous.Color != "blue" && StartPosition.Previous.Color != "green")
                    {
                        StartPosition.ShouldBeCut = true;
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "B":
                case "O":
                {
                    if (StartPosition.Start % 2 == 0)
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "C":
                case "P":
                {
                    if (StartPosition.Previous.ShouldBeCut)
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "D":
                case "Q":
                {
                    if (StartPosition.Previous.Color == "red" || StartPosition.Previous.Color == "blue" || StartPosition.Previous.Color == "black")
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "E":
                case "R":
                {
                    var list = new List <string>();
                    if (!list.Exists(x => x == StartPosition.Previous.Previous.Previous.Color))
                    {
                        list.Add(StartPosition.Previous.Previous.Previous.Color);
                    }
                    if (!list.Exists(x => x == StartPosition.Previous.Previous.Color))
                    {
                        list.Add(StartPosition.Previous.Previous.Color);
                    }
                    if (!list.Exists(x => x == StartPosition.Previous.Color))
                    {
                        list.Add(StartPosition.Previous.Color);
                    }
                    if (list.Count == 2)
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "F":
                case "S":
                {
                    if ((StartPosition.Previous.Previous.Color == StartPosition.Color && StartPosition.Previous.Color != StartPosition.Color) || (StartPosition.Previous.Color == StartPosition.Color && StartPosition.Previous.Previous.Color != StartPosition.Color))
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "G":
                case "T":
                {
                    if (StartPosition.Previous.Color == "yellow" || StartPosition.Previous.Color == "white" || StartPosition.Previous.Color == "green")
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "H":
                case "U":
                {
                    if (!StartPosition.Previous.ShouldBeCut)
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "I":
                case "V":
                {
                    if (StartPosition.Previous.Start + 1 != StartPosition.Start)
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "J":
                case "W":
                {
                    if (StartPosition.Previous.Color != "white" || StartPosition.Previous.Color != "black" || StartPosition.Previous.Color != "red")
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "K":
                case "X":
                {
                    if (StartPosition.Previous.Previous.Color != StartPosition.Previous.Color)
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "L":
                case "Y":
                {
                    if (!(StartPosition.Previous.End <= 6))
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }

                case "M":
                case "Z":
                {
                    var list = new List <string> {
                        "white", "black"
                    };
                    if (!list.Contains(StartPosition.Previous.Previous.Color) || !list.Contains(StartPosition.Previous.Color))
                    {
                        result += StartPosition.Start + "-" + StartPosition.End + ", ";
                        StartPosition.ShouldBeCut = true;
                    }
                    if (ReversedOrder)
                    {
                        StartPosition = StartPosition.Previous;
                        var number = InternalFunctions.GetNumberFromLetter(letter) - 1;
                        if (number == -1)
                        {
                            number = 26;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    else
                    {
                        StartPosition = StartPosition.Next;
                        var number = InternalFunctions.GetNumberFromLetter(letter) + 1;
                        if (number == 27)
                        {
                            number = 1;
                        }
                        letter = InternalFunctions.GetLetterFromNumber(number);
                    }
                    break;
                }
                }

                StartPosition.Previous.Resolved = true;
            }
            Solved = true;
            return(result.Substring(0, result.Length - 2) + ".");
        }
コード例 #3
0
        public string Solution(Bomb bomb)
        {
            PairCharacterValue1 = InternalFunctions.GetNumberFromLetter(bomb.GetSerialCharacterAtPosition(4));
            PairCharacterValue2 = InternalFunctions.GetNumberFromLetter(bomb.GetSerialCharacterAtPosition(5));

            ChangeCharacterValue(bomb.GetLitIndicatorsWithLetter(RecievedCharacter1), 1);
            ChangeCharacterValue(bomb.GetLitIndicatorsWithLetter(RecievedCharacter2), 1);
            ChangeCharacterValue(bomb.GetLitIndicatorsWithLetter(RecievedCharacter3), 1);
            ChangeCharacterValue(bomb.GetUnlitIndicatorsWithLetter(RecievedCharacter1), 2);
            ChangeCharacterValue(bomb.GetUnlitIndicatorsWithLetter(RecievedCharacter2), 2);
            ChangeCharacterValue(bomb.GetUnlitIndicatorsWithLetter(RecievedCharacter3), 2);

            if (InternalFunctions.IsSquare(PairCharacterValue1 + PairCharacterValue2))
            {
                ChangeCharacterValue(4, 1);
            }
            else
            {
                ChangeCharacterValue(-4, 2);
            }

            if (RecievedCharacterValue1 > RecievedCharacterValue2)
            {
                if (RecievedCharacterValue1 > RecievedCharacterValue3)
                {
                    ChangeCharacterValue(RecievedCharacterValue1, 1);
                }
                else
                {
                    ChangeCharacterValue(RecievedCharacterValue3, 1);
                }
            }
            else
            if (RecievedCharacterValue2 > RecievedCharacterValue3)
            {
                ChangeCharacterValue(RecievedCharacterValue2, 1);
            }
            else
            {
                ChangeCharacterValue(RecievedCharacterValue3, 1);
            }

            if (InternalFunctions.IsPrime(RecievedCharacterValue1))
            {
                ChangeCharacterValue(-RecievedCharacterValue1, 1);
            }
            if (InternalFunctions.IsPrime(RecievedCharacterValue2))
            {
                ChangeCharacterValue(-RecievedCharacterValue2, 1);
            }
            if (InternalFunctions.IsPrime(RecievedCharacterValue3))
            {
                ChangeCharacterValue(-RecievedCharacterValue3, 1);
            }

            if (InternalFunctions.IsSquare(RecievedCharacterValue1))
            {
                ChangeCharacterValue(-RecievedCharacterValue1, 2);
            }
            if (InternalFunctions.IsSquare(RecievedCharacterValue2))
            {
                ChangeCharacterValue(-RecievedCharacterValue2, 2);
            }
            if (InternalFunctions.IsSquare(RecievedCharacterValue3))
            {
                ChangeCharacterValue(-RecievedCharacterValue3, 2);
            }

            if (bomb.HasManyBatteries(1))
            {
                if (RecievedCharacterValue1 % bomb.GetBatteries() == 0)
                {
                    ChangeCharacterValue(-RecievedCharacterValue1, 1); ChangeCharacterValue(-RecievedCharacterValue1, 2);
                }
                if (RecievedCharacterValue2 % bomb.GetBatteries() == 0)
                {
                    ChangeCharacterValue(-RecievedCharacterValue2, 1); ChangeCharacterValue(-RecievedCharacterValue2, 2);
                }
                if (RecievedCharacterValue3 % bomb.GetBatteries() == 0)
                {
                    ChangeCharacterValue(-RecievedCharacterValue3, 1); ChangeCharacterValue(-RecievedCharacterValue3, 2);
                }
            }

            if (PairCharacterValue1 == PairCharacterValue2)
            {
                return(InternalFunctions.GetMorseFromLetter(InternalFunctions.GetLetterFromNumber(PairCharacterValue1)));
            }
            else
            if (PairCharacterValue1 > PairCharacterValue2)
            {
                return(InternalFunctions.GetMorseFromLetter(InternalFunctions.GetLetterFromNumber(PairCharacterValue1 - PairCharacterValue2)));
            }
            else
            {
                return(InternalFunctions.GetMorseFromLetter(InternalFunctions.GetLetterFromNumber(PairCharacterValue1 + PairCharacterValue2)));
            }
        }
コード例 #4
0
ファイル: Chess.cs プロジェクト: 1537592846/ktane-bomb-manual
        public override string Solve(Bomb bomb)
        {
            DefinePosition4();
            DefinePosition5();
            DefinePosition2(bomb.HasSerialLastDigitOdd());
            DefinePosition1();
            DefinePosition3();
            DefinePosition6();

            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    if (!Chessboard[i, j].UnderAttack)
                    {
                        Solved = true;
                        return("The position is " + InternalFunctions.GetPhoneticLetterFromLetter(InternalFunctions.GetLetterFromNumber(i + 1)) + " " + (j + 1) + ".");
                    }
                }
            }

            return("");
        }