Задание 16 урок 15

Дан массив длиной N(не более 100 элементов),
состоящий из случайно выбранных чисел из диапазона от 0 до k
где 0≤k Найдите в этом массиве длину самого короткого фрагмента,
который содержит все числа от от 0 до k.

program U15Z16;
type mas=array[1..11] of integer;
var a:mas = (1,0,0,1,1,3,2,0,1,2,2);
    n,k,i,j,kol,u,d,df:integer;
begin
  N:= 11;
  K:=3;
  d:=1;   // счетчик текущей длинны фрагмента проверки
          // i - левая граница текущего фрагмента
          // u - правая граница текущего фрагмента
          // k+1 - искомая минимальная длина фрагмента
          // u - i + 1; - текущая длина на момент
          //     очередного совпадения (пройдено элементов)
  df:=n+1;  // мин фрагмент:= начальное значение
            //если не встретятся искомые совпаденния
  kol:=0;//счетчик совпадений
  //randomize();
  //for i:=1 to n do
  //begin
  //    a[i]:=random(k+1);
  //    write(a[i],' ');
  //
  //  end;
  writeln();
  writeln('i ','j ','u ','u-i+1 ','d ','kol ','df');
    //(1,0,0,1,1,3,2,0,1,2,2)

  for i:=1 to n-k do  // 1 фрагмент массива без пользовательского числа

  //1 блок определения минимальной длинны фрагмента с совпадениями
  begin
      for j:=0 to k do //пользовательский диапазон
      begin
          for u:=i to n do //определение правой границы фрагмента
          begin
              if (a[u]=j) then  //найдено совпадение
              begin
                  if (d<(u-i+1)) then
                      d:= u-i+1;  //счетчик равен числу пройденных элементов
                  kol:=kol+1;
                  break;
              end;
          end;
      end;     ///////////////конец 1 блока

          //2 блок выявление самого минимального фрагмента с совпадениями
      if (kol=(k+1)) then //счетчик совпадений достиг искомого значения
      begin    //если в теле внешнеш цикла нашлись все элементы от 0 до к
          if (d=(k+1)) then   //счетчик текущей длины достиг искомого значения
          begin
              df:=d;         // минимальная длинна определена
              break;
          end
          else
              if d<df then   //если текущий меньше искомого (минимального)
                  df:=d; // искомый уменьшется до значения текущего
                  writeln(i,' ',j,' ',u,' ',u-i+1,' ',d,' ',kol,' ',df);
      end;
      if (df=k+1) then   // если  искомый  стал самым мимнимальным
        break;           // ЗАКАНЧИВАЕМ
      d:=1;              //если не стал
      kol:=0;             //все сначала

  end;
  if (df=(n+1)) then //если не все элементы найдены
      writeln('massiv ne soderzhit vse chisla ot 0 do ',k)
  else
      writeln('min dlinna = ', df);
  readln();
end.