Esempio n. 1
0
        private static string PerformDanceMove(string programs, IDanceMove danceMove)
        {
            switch (danceMove.Type)
            {
            case DanceMoveType.Spin:
                SpinDanceMove spinDanceMove = (SpinDanceMove)danceMove;
                return(string.Join(string.Empty, programs.Skip(programs.Length - spinDanceMove.X))
                       + string.Join(string.Empty, programs.Take(programs.Length - spinDanceMove.X)));

            case DanceMoveType.Exchange:
                ExchangeDanceMove exchangeDanceMove = (ExchangeDanceMove)danceMove;
                char   a             = programs[exchangeDanceMove.A];
                char   b             = programs[exchangeDanceMove.B];
                char[] exchangeChars = programs.ToCharArray();
                exchangeChars[exchangeDanceMove.B] = a;
                exchangeChars[exchangeDanceMove.A] = b;
                return(string.Join(string.Empty, exchangeChars));

            case DanceMoveType.Partner:
                PartnerDanceMove partnerDanceMove = (PartnerDanceMove)danceMove;
                int    idxA         = programs.IndexOf(partnerDanceMove.A);
                int    idxB         = programs.IndexOf(partnerDanceMove.B);
                char[] partnerChars = programs.ToCharArray();
                partnerChars[idxA] = programs[idxB];
                partnerChars[idxB] = programs[idxA];
                return(string.Join(string.Empty, partnerChars));

            default:
                throw new ArgumentException();
            }
        }
Esempio n. 2
0
        private IDanceMove ParseMove(string move)
        {
            IDanceMove parsedMove = null;

            switch (move[0])
            {
            case 's':
                parsedMove = new Spin()
                {
                    NumToMove = Int32.Parse(move.Substring(1))
                };
                break;

            case 'x':
                parsedMove = new Exchange()
                {
                    PositionA = Int32.Parse(move.Substring(1,
                                                           move.IndexOf('/') - 1)),
                    PositionB = Int32.Parse(move.Substring(
                                                move.IndexOf('/') + 1
                                                ))
                };
                break;

            case 'p':
                parsedMove = new Partner()
                {
                    PositionA = move.Substring(1,
                                               move.IndexOf('/') - 1),
                    PositionB = move.Substring(move.IndexOf('/') + 1)
                };
                break;

            default:
                throw new InvalidDataException("Dance move data is invalid.");
            }

            return(parsedMove);
        }