public Control Run()
        {
            var instructions = InstructionMenu().Ask();

            if (instructions == MANUAL_INPUT)
            {
                var instructionReader = new MultiLineRead("Please input the navigation instructions:");
                instructions = instructionReader.Ask();
            }

            var position  = new Position(0, 0, Cardinal.North);
            var positions = new List <Position>();

            positions.Add(position);
            position = ApplyInstructions(position, ConvertInstructions(instructions), positions);

            var blocks = BlocksFromOrigin(position);

            Console.WriteLine("You are {0} blocks from your drop point.", blocks);

            position = FindRepeatPosition(positions);
            if (position != null)
            {
                blocks = BlocksFromOrigin(position);
                Console.WriteLine("First duplicated position is {0}, which is {1} blocks from your drop point.", position, blocks);
            }

            return(Control.Continue);
        }
        public Control Run()
        {
            var input       = new MultiLineRead("Please input the sequence of triangles:");
            var triangleStr = input.Ask().Trim();
            var triangles   = ConvertTriangles(triangleStr);

            WriteValidCount(triangles);
            WriteValidCount(VerticalTriangles(triangles), " Vertical ");
            return(Control.Continue);
        }