" писал(а):Предложишь другой вариант решения этой задачи? Есть другие, более краткие способы? - давай, оптимизатор -);
Что ж, по многочисленным просьбам телезрителей, :-), меняем метод работы. Будем не удалять, а собирать.
Код: Выделить всё
i := 1;
For x := 2 to length(s) do
if s[x]<>s[i] then
begin
inc(i);
s[i] := s[x];
end;
s[0] := chr(i);
Подлинее, но ...
Тесты скорости, использовалась строка 'Hells Bells', время замера - 100 тактов DOS таймера (~5.5 сек)
Код №1 - вариант Максима
Код №2 - вариант мой.
----------------------------
Код №1 - 3 645 365 раз/сек
Код №2 - 18 825 449 раз/сек
----------------------------
Строка 'Thanks for choosing Google Earth, now click finish to complete setup'
Код №1 - 2 402 021 раз/сек
Код №2 - 5 606 163 раз/сек
----------------------------
Строка 'Deleeeeete thissssssss pleassssseeeeee'
Код №1 - 501 818 раз/сек
Код №2 - 10 029 670 раз/сек
[quote="""]Предложишь другой вариант решения этой задачи? Есть другие, более краткие способы? - давай, оптимизатор -);[/quote]
Что ж, по многочисленным просьбам телезрителей, :-), меняем метод работы. Будем не удалять, а собирать.
[code]
i := 1;
For x := 2 to length(s) do
if s[x]<>s[i] then
begin
inc(i);
s[i] := s[x];
end;
s[0] := chr(i);
[/code]
Подлинее, но ...
Тесты скорости, использовалась строка 'Hells Bells', время замера - 100 тактов DOS таймера (~5.5 сек)
Код №1 - вариант Максима
Код №2 - вариант мой.
----------------------------
Код №1 - 3 645 365 раз/сек
Код №2 - 18 825 449 раз/сек
----------------------------
Строка 'Thanks for choosing Google Earth, now click finish to complete setup'
Код №1 - 2 402 021 раз/сек
Код №2 - 5 606 163 раз/сек
----------------------------
Строка 'Deleeeeete thissssssss pleassssseeeeee'
Код №1 - 501 818 раз/сек
Код №2 - 10 029 670 раз/сек