> -- Илья Ермаков писал(а):
> Привожу как примеры, где ЦД хорошо сработал.После осмысленного синтеза и оптимизации алгоритма 1 получилось два варианта на выбор. Лишних сравнений нет, ЦД тоже нет. Мне больше нравится второй, хотя он и подлиннее. Не тестировал.## Код:
```
WHILE (i + j < end) & (j < wlen) DO
  IF (s[i + j] = words[w][j]) THEN
    INC(j)
  ELSIF (w = wordCount - 1) THEN
    (* дальше нельзя увеличивать w *)
    INC(i); w := 0; wlen := lens[0]; j := 0
  ELSE
     INC(w); wlen := lens[w]; j := 0
  END;
END;
---------------------------------------------
WHILE (i + j < end) & (j < wlen) DO
  IF (s[i + j] = words[w][j]) THEN
    INC(j)
  ELSE
    INC(w);
    IF (w = wordCount) THEN
      INC(i); w := 0; wlen := lens[0]; j := 0
    ELSE
       INC(w); wlen := lens[w]; j := 0
    END;
  END;
END;
```
Теоретически эти варианты можно было сразу вывести из первоначального, но это стало ясно (мне) только в конце.