Тема: Змійка
Допоможіть оптимізувати. Ось умова задачі:
Петрик із слоненятком грають компютерну гру "Змійка". Гра проходить на нескінченній площині і полягає в наступному:спочатку задано координати x, y голови змійки. Гра триває N ходів: на кожному ході обирають напрямок у якому буде рухатись голова змійки далі. Хвіст і тіло змійки залишаються нерухомими, тобто після кожного коректного ходу голова змійки зростає на 1. Гра закінчується успішно якщо буде виконано всі N ходів і голова змійки жодного разу не зіткнеться з тілом змійки.
Для вибраних Петриком початкових координат x, y і послідовності ходів, обраних Слоненятком вам слід відповісти чи успішно закінчиться гра. У випадку якщо гра закінчиться неуспішно, виведіть номер ходу коли голова змійки зіткнеться з тілом.
Вхідні дані:
У першому рядку задано початкові координати x, y змійки. У другому рядку задано стрічк S, що визначає послідовність ходів. Стрічка S складається тільки із символів 'L', 'R', 'U', 'D'. Якщо голова змійки знаходиться в точці з координатами (x, y), то у випадку команди 'L' вона перейде у точку
(x-1, y), 'R' в точку (x+1, y), 'U' в точку (x, y+1), 'D' в точку (x, y-1) .
Вихідні дані:
Виведіть 'Success' (без лапок) якщо гра закінчиться успішно. Інакше в першому рядку виведіть 'Fail' , в другому рядку виведіть номер ходу після якого відбудеться перше зіткнення голови змійки з тілом. Ходи нумеруються починаючи з одиниці.
Обмеження:
1<=x,y<=100000
1<=S<=1000000
Приклади:
Вхідні дані: Вихідні дані:
1 2 Fail
RRRUULLDRRD 10
Код який я написав проходить 16 тестів. Розумію, що він примітивний дайте якусь нову ідею розвязку.
var
a: mas; s: string; x, y, len, k: longint; peretin: boolean;
begin
readln(x, y);
read(s);
x:=5000; y:=5000;
a[x, y] := 1;
len := length(s);
k := 1;
peretin := false;
while (k <= len) and (peretin = false) do
begin
if s[k] = 'L' then x := x - 1;
if s[k] = 'R' then x := x + 1;
if s[k] = 'U' then y := y + 1;
if s[k] = 'D' then y := y - 1;
if a[x, y] = 0 then begin a[x, y] := 1; k := k + 1 end else peretin := true;
end;
if peretin = true then begin writeln('Fail'); write(k) end else write('Success');
end.