Exemplo n.º 1
0
        public static Move operator +(Move a, Move b)
        {
            Move result = new Move(0, 0, 0);
            result.moveX = a.moveX + b.moveX;
            result.moveY = a.moveY + b.moveY;
            result.moveZ = a.moveZ + b.moveZ;

            return result;
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            string dim = Console.ReadLine();
            string[] parts = dim.Split(' ');

            int width = int.Parse(parts[0]);
            int height = int.Parse(parts[1]);
            int depth = int.Parse(parts[2]);

            Move[,,] cube = new Move[width, height, depth];

            for (int j = 0; j < height; ++j)
            {
                string line = Console.ReadLine();
                string[] widthParts = line.Split(new string[] { " | " }, StringSplitOptions.None);
                for (int k = 0; k < depth; ++k)
                {
                    MatchCollection collection = Regex.Matches(widthParts[k], @"\((.+?)\)");
                    for (int i = 0; i < collection.Count; ++i)
                    {
                        string tmp = collection[i].Groups[1].Value;
                        cube[i, j, k] = ParseMove(tmp);

                        //Console.WriteLine(cube[i, j, k].moveX + " " +
                        //    cube[i, j, k].moveY + " " + cube[i, j, k].moveZ + " " + cube[i, j, k].isTeleport);
                    }
                }
            }

            string startDim = Console.ReadLine();
            string[] startParts = startDim.Split(' ');

            int startWidth = int.Parse(startParts[0]);
            int startDepth = int.Parse(startParts[1]);

            Move currentPosition = new Move(startWidth, 0, startDepth);
            Move nextMove, nextPosition;
            string answer;

            while (true)
            {
                nextPosition = currentPosition;
                nextMove = cube[currentPosition.moveX, currentPosition.moveY, currentPosition.moveZ];

                //Console.WriteLine("{0} {1} {2}", currentPosition.moveX, currentPosition.moveY, currentPosition.moveZ);
                //Console.WriteLine("{0} {1} {2} {3}", nextMove.moveX, nextMove.moveY, nextMove.moveZ, nextMove.isTeleport);

                if (nextMove.isTeleport)
                {
                    nextPosition = new Move(nextMove.moveX, nextPosition.moveY, nextMove.moveZ);
                    nextPosition.isTeleport = false;
                }
                else
                {
                    nextPosition = nextPosition + nextMove;
                    nextPosition.isTeleport = false;
                }

                if (nextPosition == currentPosition) // in basket
                {
                    answer = "No";
                    break;
                }
                else if (nextPosition.moveY >= height)
                {
                    answer = "Yes";
                    break;
                }
                else if (nextPosition.moveX >= 0 && nextPosition.moveX < width &&
                         nextPosition.moveY >= 0 && nextPosition.moveY < height &&
                         nextPosition.moveZ >= 0 && nextPosition.moveZ < depth)
                {
                    currentPosition = nextPosition;
                }
                else
                {
                    answer = "No";
                    break;
                }
            }
            Console.WriteLine(answer);
            Console.WriteLine("{0} {1} {2}", currentPosition.moveX, currentPosition.moveY, currentPosition.moveZ);
        }
Exemplo n.º 3
0
        static Move ParseMove(string s)
        {
            if (s[0] == 'S')
            {
                Move result = new Move(0, 1, 0, false);
                for (int i = 2; i < s.Length; ++i)
                {
                    result = result + GetCharMove(s[i]);
                }
                return result;
            }
            else if (s[0] == 'T')
            {
                string[] parts = s.Split(' ');
                int newWidth = int.Parse(parts[1]);
                int newDepth = int.Parse(parts[2]);

                return new Move(newWidth, 0, newDepth, true);
            }
            else if (s[0] == 'E')
            {
                return new Move(0, 1, 0);
            }
            else
            {
                return new Move(0, 0, 0);
            }
        }