예제 #1
0
        //DS: PLACE {digit},{digit},{north|south|east|west}
        public static TableAreaVm GetFirstLineValuesOnly(List <string> inputs)
        {
            if (inputs == null)
            {
                new ArgumentException("Invalid input values");
            }
            TableAreaVm area = new TableAreaVm();
            string      firstline = inputs.FirstOrDefault().ToLower();
            int         x = 0, y = 0;

            var linesSpaces = firstline.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

            if (linesSpaces[0] != "place")
            {
                throw new ArgumentException("instruction should begin with >>>place<<<");
            }
            var linesCommas = linesSpaces[1].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

            if (!faces.Any(x => x == linesCommas.LastOrDefault()))
            {
                throw new ArgumentException("invalid face direction");
            }
            else if (!int.TryParse(linesCommas[0], out x) || !int.TryParse(linesCommas[1], out y))
            {
                throw new ArgumentException("invalid co-ordinate");
            }
            area.X = x;
            area.Y = y;
            area.FacingDirections = (FacingDirections)Enum.Parse(typeof(FacingDirections), linesCommas[2].ToUpper());
            area.XMax             = TableAreaDefaultValues.MaxX;
            area.YMax             = TableAreaDefaultValues.MaxY;

            return(area);
        }
예제 #2
0
        public string MissionControl(List <string> inputs)
        {
            if (inputs == null)
            {
                throw  new ArgumentException("Invalid input instruction");
            }

            TableAreaVm area = InputHelper.GetFirstLineValuesOnly(inputs);

            this.tableare.X = area.X;
            this.tableare.Y = area.Y;
            this.tableare.FacingDirections = area.FacingDirections;

            foreach (var move in InputHelper.GetInstructionValuesOnly(inputs))
            {
                switch (move.ToLower())
                {
                case "move":
                    this.MoveContinue();
                    break;

                case "left":
                    Left_Rotation();
                    break;

                case "right":
                    Right_Rotation();
                    break;

                case "report":
                    return(Report());

                default:
                    break;
                }
            }
            ValidateTableArea();
            return(null);
        }