busiki47.PAS

{* Задача 48 *}

Unit BUSIKI47;
Interface
Implementation
Begin
 writeln('Имеются бусы, состоящие из N бусинок, некотрые из которых красного или голубого цвета, а остальные - белые. Конфигурация бус задается последовательностью цветов бусинок("b"-голубая,"r"-красная,"w"- белая), начиная с бусинки №1. Порвем бусы и начнем снимать бусинки одного цвета с певого конца, пока не встретится бусинка другого цвета. То же самое проделаем со вторым концом бусинки. Белая бусинка рассматривается как бусинка карасного или голубого цвета по ситуации, то есть может сниматься и с голубыми и красными. Бусы могут не содержать бусинок красного или голубого цвета. Требуется определить точку такого разрыва данных бус, при котором суммарное количество бусинок, собранных с обеих концов максимально.
нужно вывести максимальное количество снятых бус и номера бусинок, между которыми точка разрыва.
например:
NECKLACE.IN NECKLACE.OUT
bwrbrbrbwb 6 7 8'
);
End.

Program busiki47;

Uses busiki47.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключаем внешние файлы *}
Const {* Постоянные значения *}
  ok = false;
Var {* Объявление переменных *}
  a      : Array[1..50] Of String;
  i      : byte;
  j      : byte;
  bus    : byte;
  nowkol : byte;
  nowkor : byte;
  maxkol : byte;
  kor1   : byte;
  kor2   : byte;
  c1     : String;
  c2     : String;
Begin
  clrscr; {* Очищаем экран *}
  randomize;
  textcolor(yellow); {*  текст *}
  write('Kolichestvo businok: ');
  readln(bus);
  For i := 1 To bus Do {randomnoe zapolnenie i raspechatka}
  Begin
    Case random(3) Of             0:
    Begin
      a[i] := 'b';
      textcolor(lightblue); {* Выбрать  цвет текста *}
    End;
    1:
    Begin
      a[i] := 'r';
      textcolor(lightred); {*  текст *}
    End;
    2:
    Begin
      a[i] := 'w';
      textcolor(white); {*  текст *}
    End;
    
  End;
  write(a[i]);
End;
For i := 1 To bus Do {perebor razrivov}
Begin
  nowkol := 0;
  c1 := '';
  c2 := '';
  If i - 1 = 0 Then
    nowkor := bus
  Else nowkor := i - 1;
    j := nowkor;
  While oktrue Do {perebor vlevo}
  Begin
    If nowkol = bus Then
      break;
    If (a[j]'w'And (c1 = ''Then
      c1 := a[j];
    If (a[j] = 'w'Or (a[j] = c1) Then
      inc(nowkol); {* Увеличиваем nowkol на 1 *}
    If (a[j]'w'And (a[j]c1) Then
      break;
    dec(j); {* j-- *}
    If j = 0 Then
      j := bus;
  End;
  j := i;
  While oktrue Do {perebor vpravo}
  Begin
    If nowkol = bus Then
      break;
    If (a[j]'w'And (c2 = ''Then
      c2 := a[j];
    If (a[j] = 'w'Or (a[j] = c2) Then
      inc(nowkol); {* nowkol++ *}
    If (a[j]'w'And (a[j]c2) Then
      break;
    inc(j); {* Прибавим к j единицу *}
    If j = bus + 1 Then
      j := 1;
  End;
  If nowkol > maxkol Then {zapisivanie novih dannih}
  Begin
    maxkol := nowkol;
    kor1 := nowkor;
    kor2 := i;
  End;
  
End;
writeln; {* Пустая строка *}
For i := 1 To bus Do {vizualnii razriv}
Begin
  If i = kor2 Then
  Begin
    textcolor(yellow); {* Выбрать  цвет текста *}
    write('_');
  End;
  If a[i] = 'b' Then
    textcolor(lightblue) {* Выбрать  цвет текста *}
  Else If a[i] = 'r' Then
    textcolor(lightred) {*  текст *}
  Else textcolor(white); {*  текст *}
    write(a[i]);
End;
writeln; {* Пустая строка *}
textcolor(yellow); {*  текст *}
write(maxkol, ' ', kor1, '-', kor2); {itog}
readkey; {* Ждем нажатия пользователя *}
End....