У меня есть функция, которая возвращает строку с координатами и направлением, на которое смотрит объект. Но мне очень не нравится длина функции, и я хотел бы ее сократить. Я не знаю, что я мог бы сделать, чтобы сократить его. Кто-нибудь может мне помочь?
Функция выглядит так:
public string Execute(string text)
{
var letters = text.ToCharArray().ToList();
foreach (var letter in letters)
{
if (letter == 'R')
{
switch(direction)
{
case "N":
direction = "E";
break;
case "E":
direction = "S";
break;
case "S":
direction = "W";
break;
case "W":
direction = "N";
break;
}
}
if (letter == 'L')
{
switch (direction)
{
case "N":
direction = "W";
break;
case "E":
direction = "N";
break;
case "S":
direction = "E";
break;
case "W":
direction = "S";
break;
}
}
if (letter == 'M')
{
switch (direction)
{
case "N":
positionY++;
break;
case "E":
positionX++;
break;
case "S":
positionY--;
break;
case "W":
positionX--;
break;
}
}
if (letter == 'B')
{
switch (direction)
{
case "N":
positionY--;
break;
case "E":
positionX--;
break;
case "S":
positionY++;
break;
case "W":
positionX++;
break;
}
}
}
return $"{positionX}:{positionY}:{direction}";
}
Этот текст внизу - просто бесполезный текст, поэтому я могу отправить свой вопрос, потому что мой код слишком длинный, а Stackoverflow распознает вопрос как в основном код, поэтому мне нужно написать больше текста без кодовых скобок, чтобы иметь возможность отправить вопрос. Вам не нужно читать этот Текст, потому что он не имеет цели.
R
иL
похоже, что прямое вращение вращается либо по часовой стрелке, либо против часовой стрелки. Вы можете написать небольшую функцию, которая позволяет это (с массивом строк направления (которые вы делаете циклическим) и что ваш код перемещается влево или вправо в массиве). Точно так же дляM
иB
вы смещаете позиции либо на+1
, либо на-1
по фиксированному шаблону. Преобразуйте эту логику в функцию, которая вычисляет правило. - person Flydog57   schedule 25.03.2021