Не такое оно и сложное. Главная проблема - то, что между словами может быть несколько пробелов. Устраним её, написав функцию, которая оставляла бы между словами по 1 пробелу:
function RemoveSpaces(str : string) : string; begin //Тут цикл for, переписанный через while var iter := 1; //Проходим по строке while (iter < str.Length) do begin //Если видим 2 пробела подряд, удаляем 1 и откатывает итератор. if (str[iter] = ' ') and (str[iter + 1] = ' ') then begin str := str.Remove(iter, 1); iter -= 1; end; iter += 1; end; RemoveSpaces := str; end;
Теперь мы можем получить кол-во слов очень просто:
function CalcWords(str : string) : integer; begin CalcWords := RemoveSpaces(str).Split(' ').Count(); end;
Т.е. мы делим строку на массив через пробелы, и считаем кол-во элементов массива.
Считаем на сколько изменятся координаты после выполнения всех команд.
1. Нет команды "конец". Если команда "повторить" относится ко всем трем командам, то получаем: x+3(-2+3+4)=x+15, y+3(-3+2+0)=y-3. Как видим, такой команды (15,-3) в ответах нет. Может быть, в условии опечатка и последняя команда должна быть не (4,0), а (-4,0). Тогда получится x+3(-2+3-4)=x-9, y+3(-3+2+0)=y-3. Команда (-9,-3). Это ответ под номером 1.
2. x+3(1-2)+4=x+1, y+3(3-5)+8=y+2. Чтобы вернуться, нужна команда (-1,-2). ответ под номером 1.
3. x+2(2+5+1)=x+16, y+2(1-4+4)=y+2. Чтобы вернуться, нужна команда (-16,-2). Такого ответа опять нет. Надо проверить условие.
Главная проблема - то, что между словами может быть несколько пробелов.
Устраним её, написав функцию, которая оставляла бы между словами по 1 пробелу:
function RemoveSpaces(str : string) : string;
begin
//Тут цикл for, переписанный через while
var iter := 1;
//Проходим по строке
while (iter < str.Length) do
begin
//Если видим 2 пробела подряд, удаляем 1 и откатывает итератор.
if (str[iter] = ' ') and (str[iter + 1] = ' ') then
begin
str := str.Remove(iter, 1);
iter -= 1;
end;
iter += 1;
end;
RemoveSpaces := str;
end;
Теперь мы можем получить кол-во слов очень просто:
function CalcWords(str : string) : integer;
begin
CalcWords := RemoveSpaces(str).Split(' ').Count();
end;
Т.е. мы делим строку на массив через пробелы, и считаем кол-во элементов массива.
полный код: https://pastebin.com/A63ggdWm
1. Нет команды "конец". Если команда "повторить" относится ко всем трем командам, то получаем: x+3(-2+3+4)=x+15, y+3(-3+2+0)=y-3. Как видим, такой команды (15,-3) в ответах нет. Может быть, в условии опечатка и последняя команда должна быть не (4,0), а (-4,0). Тогда получится
x+3(-2+3-4)=x-9, y+3(-3+2+0)=y-3. Команда (-9,-3). Это ответ под номером 1.
2. x+3(1-2)+4=x+1, y+3(3-5)+8=y+2. Чтобы вернуться, нужна команда (-1,-2). ответ под номером 1.
3. x+2(2+5+1)=x+16, y+2(1-4+4)=y+2. Чтобы вернуться, нужна команда (-16,-2). Такого ответа опять нет. Надо проверить условие.