Задача 2 (8 баллов)
--------
На ленте расположены две записи через пустую клетку друг от друга.
Сформировать третью запись, состоящую из одинаковых символов первых
двух записей.


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

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

решение куратора
----------------

алгоритм
--------
Организуем цикл по просмотру символов первой записи.
Для каждого символа:
  -- запоминаем символ в ящике
  -- ищем запомненный символ во второй записи
  -- если находим, добавляем его в третью запись,
     при условии, что там его еще нет.

Решение
-------

ЭТО вход                          │
 ВПРАВО                           │На начало первой записи
                                  │
 ПОКА НЕ ПУСТО                    │Просмотр первой записи
 {                                │
  ЯЩИК+                           │Запоминаем очередной символ
  обработка                       │Обработка символа
  ВПРАВО                          │К следующему символу
 }                                │
                                  │
 ВПРАВО                           │Установим окошко на начало
 ПОКА НЕ ПУСТО ВПРАВО             │третьей записи
 ВПРАВО                           │
КОНЕЦ                             │
                                  │
                                  │Обработка символа из первой записи
ЭТО обработка                     │Символ находится в ящике
 ВПРАВО                           │Перемещаем рекурсивно окно на конец
 ЕСЛИ НЕ ПУСТО ТО обработка       │первой записи.
 ИНАЧЕ { ВПРАВО поиск_в_записи2 } │Ищем запомненный символ в записи 2.
                                  │
 ВЛЕВО                            │Рекурсивная пружинка. Она вернет окно
                                  │с пустой клетки за концом первой записи
КОНЕЦ                             │на текущий символ в ней (который
                                  │копировался в ящик.
                                  │
                                  │Поиск запомненного символа в записи 2.
ЭТО поиск_в_записи2               │
  ЕСЛИ       Я=Л   ТО запись3     │Если символ обнаружен, добавляем его
                                  │в запись 3.
  ИНАЧЕ ЕСЛИ ПУСТО ТО запись1     │Символ не обнаружен -- возвращаем окно
                                  │на пустую клетку после первой записи.
  ИНАЧЕ                           │
  {                               │Продолжаем рекурсивный поиск символа в
    ВПРАВО                        │записи 2.
    поиск_в_записи2               │
  }                               │
КОНЕЦ                             │
                                  │
                                  │Добавить символ в запись 3, если его
ЭТО запись3                       │там нет.
 ПОКА НЕ ПУСТО ВПРАВО             │Пропускаем остаток записи 2 и устанавливаем
 ВПРАВО                           │окно на начало записи 3.
                                  │
 поиск_запись3                    │Находим символ в записи 3 или ее конец.
                                  │
 ПОКА НЕ ПУСТО ВЛЕВО              │Устанавливаем окно на пустую клетку
                                  │за записью 2.
                                  │
 запись1                          │Устанавливаем окно на пустую клетку
                                  │за записью 1.
КОНЕЦ                             │
                                  │
                                  │
ЭТО поиск_запись3                 │Ищем символ в записи 3.
   ЕСЛИ       ПУСТО ТО ЯЩИК-      │Запись закончилась, добавляем символ
                                  │в ее конец.
   ИНАЧЕ ЕСЛИ Я#Л   ТО            │Если символа нет, идем дальше по записи.
      { ВПРАВО поиск_запись3 }    │
                                  │Если символ есть прекращаем движение.
КОНЕЦ                             │
                                  │
ЭТО запись1                       │Перемещение окна с пустой клетки за
 ВЛЕВО                            │второй записью на пустую клетку
 ПОКА НЕ ПУСТО ВЛЕВО              │за первой записью.
КОНЕЦ                             │
                                  │
                                  │



                           * * *

Во всех решениях в той или иной мере повторяется идея алгоритма,
предложенного куратором.

Хочется отметить ошибку, допущенную некоторыми командами -- в решении
этой задачи нельзя использовать флаги. Ведь символ-флаг может входить
в состав исходных записей и программа работать не будет. В условии
задачи нет ограничений на диапазон возможных символов, которые могут
встречаться в записях. Естественным флагом может служить клетка ПУСТО.

                           * * *

Команда 3101
------------
.\01\01.txt
Оценка: 7

Решение 1
Авторы - Гуреев Денис и Добровольский Костя
Оценка: 7

описание алгоритма
------------------
Наше решение задачи начинается с процедуры "ПовтОры", в которой
корректор копирует первый символ в ящик и выполняется процедура
"Буквы", в которой исполнитель доходит до ПУСТО и откладывает
отложенную команду ВЛЕВО. Затем в процедуре "Сравни" корректор
проверяет, совпадает ли символ в ящике с каким-либо символом во 2-ой
записи. Если совпадает, то корректор откладывает отложенную команду
ЯЩИК- и сравнивает этот символ с 3-ей записью (в которой записаны все
повторившиеся символы), а если там этот символ совпал с каким-либо
символом, то корректор "сбрасывает" символ из ящика на его место,
столько раз, сколько корректор отложил ЯЩИК-.

комментарий куратора
--------------------

Алгоритм как у куратора, реализация программы имеет небольшие отличия.
В частности, многократное переписывание уже существующего символа в
записи 3 нельзя считать хорошей идеей.



Решение 2
Автор решения: Плотников Женя
Оценка: 5

Описание алгоритма:

Из первой записи удаляется и загружается в ящик символ. С помощью
рекурсии доходит до промежутка между записями и также с рекурсией ищет
повтор. Если повтора нет, то он доходит до конца второй записи и
удаляет символ из ящика, затем отложенной командой возвращяется на
место, где был взят этот символ. Если есть повтор, то возвращает
символ на место и продолжает с другими символами первой записи.

Когда повторы все найдены, начинается удаление второй записи.
Возвращается на место, сдвигает символы третьей записи. Отсеивает
повторные.

Примечание: Моя процедура удаляет исходные записи.

комментарий куратора
--------------------

Слишком хитрый алгоритм, который никак нельзя назвать оптимальным.
В программе есть походы по кольцу ленты в длинную сторону.


Команда 3102
------------
.\02\02.txt
Авторы решения: Богатырев Геннадий
Оценка: 5

Описание алгоритма
1) Установка флага в начале первой записи
2) Организация цикла (условие выхода - ПУСТО после первого слова):
-  запоминает очередной символ первого слова,
-  осуществляет переход к концу первого слова рекурсивно (с отложенной командой
   ВЛЕВО для возврата к запомненному символу),
-  если достигнут конец слова, то осуществляется вызов процедуры для сравнения
   запомненного символа с каждым символом второго слова
  -  если символы совпали, то после второго слова формируется запись из 
     совпавших символов 
3) Удаление в новой записи повторяющихся символов   


комментарий куратора
--------------------

Чтобы не удалять из новой записи повторяющиеся символы, можно туда их
помещать без повторов! Эта ошибка алгоритма снижает эффективность
работы программы. Установка флага запрещает использовать этот символ в
записи, что делает программу неверной -- она не будет работать, когда
символ-флаг входит в состав записи.


Команда 3104
------------
.\04\04.txt
Коллективное решение.
Оценка: 7.5

описание алгоритма
------------------
Отсутствует.

комментарий куратора
--------------------
Алгоритм в точности тот, что описан куратором.
и реализация программы

Имена процедур в программе записаны большими буквами. Как уже не раз
отмечалось -- это плохо. Программу сложно читать из-за однородной
большесимвольности. Зато программа хорошо структурирована.

ИНАЧЕ СТОЯТЬ -- это лишнее!

Команда 3105
------------
.\05\05.txt
Автор Бердышева Юля
Оценка: 7.9

Описание алгоритма
------------------
Первый символ первой записи помещаем в ящик, идем к началу второй
записи и сравниваем символ в ящике с каждым символом второй записи,
если символы равны идем на конец второй записи и через пусто помещаем
символ из ящика на ленту. Возвращаемся на тот символ первой записи с
которого ушли. Поочередно помещаем в ящик каждый последующий символ из
первой записи и сравниваем его с каждым символом второй записи, если
символы совпадают то идем на начало третьей записи. Сравниваем символ
в ящике с каждым символом третьей записи, если такого символа нет, то
помещаем его в конец третьей записи, затем возвращаемся на тот символ
первой записи с которого ушли. Когда первая запись закончится
перемещаем окно на пустой символ перед третьей записью

комментарий куратора
--------------------
Буквальное повторение алгоритма куратора.

В программах не везде выдержаны структурные отступы:

ЭТО Новая_запись
Первая_запись                          
ВПРАВО
ПОКА НЕ ПУСТО ВПРАВО                   
КОНЕЦ                                  
                                       
Лучше писать так:

ЭТО Новая_запись
  Первая_запись
  ВПРАВО
  ПОКА НЕ ПУСТО ВПРАВО
КОНЕЦ                                  


Команда 3106
------------
Оценка: 1
Программа работает не по условию задачи.



Команда 3107
------------
.\07\07.txt
Оценка: 0

Нет решения.

Команда 3108
------------
.\08\0821.kor
.\08\08.txt
Оценка: 7

описание алгоритма
------------------
Последовательная запись символов первой записи в ящик и 
сравнивая его с символами второй записи пройти вправо.
Если символ совпадет то записать его в третью запись.

комментарий куратора
--------------------

Алгоритм описан не слишком детально. На самом деле он совпадает с
алгоритмом куратора. Программа обходится без рекурсивной пружинки для
возврата к текущему символу первой записи (символ временно заменяется
пробелом, который в дальнейшем используется как флаг). Установка флага
запрещает использовать этот символ в записи, что делает программу
неверной -- она не будет работать, когда символ-флаг входит в состав
записи.



Команда 3110
------------
.\10\10.txt
Оценка: 3

описание алгоритма
------------------
- поставить флаг между словами (потом его уберем)
- берем первую букву 1-го слова (запомнить в ящик)
- доходим до первой буквы во втором слове и сравниваем ее с ящиком
    если она сопадает, то вместо буквы печатаем 1 (чтобы при сравнении
          следующей буквы это была бы снова первая буква, в конце программы
          мы эти единицы заменим на символы) и печатаем ее в конце
          второго слова через пробел
    если не сопадает то заканчиваем сравнение
- когда все буквы проверены надо востановить буквы замененные на 1
- стереть все лишние символы


комментарий куратора
--------------------
В работе программе очень много лишнего. Есть проходы по ленте в
длинную сторону по кольцу. Программу нельзя признать верной. Например,
на тесте 333 33 выдается ответ 33 (правильно 3). Кроме того, установка
флага запрещает использовать этот символ в записи, что делает
программу неверной еще раз -- она не будет работать, когда символ-флаг
входит в состав записи.


Команда 3112
------------
.\12\12.txt
Автор  -   Громков Сергей
Оценка: 3

описание алгоритма
------------------
Отсутствует. Правда есть подробные комментарии в программе.

комментарий куратора
--------------------

Алгоритм в целом совпадает с алгоритмом куратора, но есть ошибки,
которые делают программу нерабочей.

Пример 41 123

Команда 3114
------------
.\14\14.txt
Оценка: 0
Решения нет.
