                     Решения задач
                     -------------

6.2.8. Задача 8 (8 баллов)  Геометрический цикл.
Средний бал решений: 3.3 (41%)

   На ленте Корректора заданы две окружности с центрами в разных
точках a  и b.  Известно, что a < b  и радиусы обеих окружностей
меньше 50.
   В клетках, изображающих центры окружностей, записаны символы,
задающие радиусы окружностей (как в условии задачи 7).
   Написать программу,  которая  закрасит  пробелами все клетки
пересечения окружностей (кроме точек a и b, даже если они попа-
дают в пересечение).
  В начальный момент окошко установлено в точке a.

   Пример работы программы:

Начальное состояние                 После работы программы
┬─┬─┬─╦═╦─┬─┬─┬─┬─┬─┐               ┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│░│░│░║4║░│1│░│░│░│░│    ─────>     │░│░│░│4│ │1│ │░│░│░│
┴─┴─┴─╩═╩─┴─┴─┴─┴─┴─┘               ┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

Решение

   Сначала закрасим  символами "#" первую окружность. Радиус ок-
ружности не может выражаться этим "числом", так по условию ради-
ус не превышает 50, а у символа "#" порядковый номер больше. За-
тем закрасим пробелами те точки второй окружности, которые попа-
дают в первую (то есть те, в которых расположен символ "#").

ЭТО пересечение            │
  красим1                  │Красим первую окружность символом "#".
                           │
  ВПРАВО                   │
  ПОКА # ВПРАВО            │Устанавливаем окошко в центр второй окружности,
  ПОКА ПУСТО               │закрашивая по дороге все пустые клетки (если они
  {                        │есть) символом "%".
    ПИШИ %                 │
    ВПРАВО                 │
  }                        │
                           │
  красим2                  │Красим пробелом те точки второй окружности, которые
                           │содержат клетки с символом "#".
                           │
  ПОКА НЕ ПУСТО ВЛЕВО      │Устанавливаем окно на первую закрашенную
  ВПРАВО                   │(любым символом) клетку.
                           │
  ПОКА НЕ ПУСТО            │ В закрашенной области все символы "#" и "%"
  {                        │ заменяем на символ ПУСТО.
    ЕСЛИ # ТО ПИШИ ПУСТО   │
    ЕСЛИ % ТО ПИШИ ПУСТО   │
    ВПРАВО                 │
  }                        │
  ПОКА ПУСТО ВЛЕВО         │Сместить окно на первую непустую клетку влево,
КОНЕЦ                      │для более наглядного представления результата.
                           │
ЭТО красим1                │ Покраска точек первой окружности
    ЯЩИК+                  │ символом "#".
    красить1_вправо        │
    ЯЩИК+                  │
    красить1_влево         │
КОНЕЦ                      │
                           │
ЭТО красить1_вправо        │
   ВПРАВО                  │
   ОБМЕН                   │
   ЕСЛИ НЕ 0               │
    ТО                     │
    {                      │
      МИНУС                │
      ОБМЕН                │
      ЕСЛИ ПУСТО ТО ПИШИ # │ Красим только пустые клетки, чтобы не
      красить1_вправо      │ закрасить центр второй окружности!
    }                      │
   ИНАЧЕ ОБМЕН             │
   ВЛЕВО                   │
КОНЕЦ                      │
                           │
ЭТО красить1_влево         │
   ВЛЕВО                   │
   ОБМЕН                   │
   ЕСЛИ НЕ 0               │
    ТО                     │
    {                      │
      МИНУС                │
      ОБМЕН                │
      ПИШИ #               │
      красить1_влево       │
    }                      │
   ИНАЧЕ ОБМЕН             │
   ВПРАВО                  │
КОНЕЦ                      │
                           │
ЭТО красим2                │ Покраска точек второй окружности, которые
    ЯЩИК+                  │ лежат в первой, пробелом.
    красить2_вправо        │
    ЯЩИК+                  │
    красить2_влево         │
КОНЕЦ                      │
                           │
ЭТО красить2_вправо        │
   ВПРАВО                  │
   ОБМЕН                   │
   ЕСЛИ НЕ 0               │
    ТО                     │
    {                      │
      МИНУС                │
      ОБМЕН                │
      ЕСЛИ # ТО ПИШИ ПРОБЕЛ│ Если точка второй окружности принадлежит
      красить2_вправо      │ первой, закрашиваем ее пробелом.
    }                      │
   ИНАЧЕ ОБМЕН             │
   ВЛЕВО                   │
КОНЕЦ                      │
                           │
ЭТО красить2_влево         │
   ВЛЕВО                   │
   ОБМЕН                   │
   ЕСЛИ НЕ 0               │
    ТО                     │
    {                      │
      МИНУС                │
      ОБМЕН                │
      ЕСЛИ # ТО ПИШИ ПРОБЕЛ│ Если точка второй окружности принадлежит
      красить2_влево       │ первой, закрашиваем ее пробелом.
    }                      │
   ИНАЧЕ ОБМЕН             │
   ВПРАВО                  │
КОНЕЦ                      │

