Задача a (9 баллов) Самое длинное слово.
--------
На ленте записан текст, состоящий из слов. Каждое слово завершает один
пробел. Найти самое длинное слово в тексте. Известно, что:

-- в словах нет цифр (символов 0,1,2,3,4,5,6,7,8,9);
-- в тексте нет слов длиннее 10 символов.

Установить окошко Корректора на начало самого длинного слова.
В начальный момент окошко расположено перед текстом.

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

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

п р о в е р к а  к у р а т о р а

В решении куратора обнаружена ошибка а процедуре "начало".
Эта процедура в старой редакции:

// Перемещение окна на начало слова
ЭТО начало
 ВЛЕВО
 ПОКА НЕ ПРОБЕЛ ВЛЕВО
 ВПРАВО
КОНЕЦ

должна быть заменена на:
                                       
// Перемещение окна на начало слова │
ЭТО начало                          │
 ВЛЕВО                              │
 ЕСЛИ НЕ ПРОБЕЛ ТО                  │Если не ПРОБЕЛ и не ПУСТО, то ВЛЕВО
   ЕСЛИ НЕ ПУСТО ТО начало          │
 ИНАЧЕ ВПРАВО                       │
КОНЕЦ                               │

Старый вариант не учитывает что перед первым словом стоит не ПРОБЕЛ, а
ПУСТО.

По эффективности решения выстраиваются так:

Решения команды 3115  2.5 прохода
Решения команды 3107  3.5 прохода
Решения команды 3110  3.5 прохода
Решение куратора      3.5 прохода
Решения команды 3106  8.5 прохода

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

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

Авторы:
Алгоритм Кузнецовой Г.В.
Реализован Лавыгиным Сергеем и
Ганиевым Женей (6кл)

Самое длинное слово.
Текст расположен сразу за окошком Корректора.

Алгоритм
--------
Идея:Просчитать длину каждого слова и записать ее впереди слова. По ко-
личеству цифр определить число слов,поместить в ЯЩИК.Затем от каждой
цифры вычитаем по 1. Вперед обнулятся цифры перед короткими словами.При
появлении нуля уменьшаем значение ЯЩИКа на 1. Когда в ЯЩИКе появится
0, это будет означать, что длина найденного слова наибольшая.Пометим его
знаком "=" и в ЯЩИК поместим "ф" (Финал).  После этого останется в
записи найти только знак "=". "ф" выступает в роли флажка, опреде-
ляющего момент поиска "=".

ЭТО Вход
 ПИШИ ПРОБЕЛ  //На этом иесте будет
                 //длина слова
 В_конец_текста
 Начало
КОНЕЦ

ЭТО Начало
 Длина_слова
 Количество_слов
 Работа
 ПИШИ ПРОБЕЛ
 ВПРАВО
КОНЕЦ


ЭТО Работа
 ОБМЕН
 ЕСЛИ НЕ ф ТО
       {
         ОБМЕН
         Поиск
         Работа
           }
          ИНАЧЕ
            {
             ОБМЕН
             Самое_длинное

                  }

КОНЕЦ

ЭТО В_конец_текста //Устанавливает
  ВПРАВО    //окшко в конец текста
  ЕСЛИ НЕ ПУСТО ТО
          В_конец_текста
КОНЕЦ

ЭТО Длина_слова
 ПИШИ 0  //Пишем 0
 ОБМЕН   //Помещаем в ЯЩИК
 ВЛЕВО
 ЕСЛИ НЕ ПУСТО ТО  //Просмотр текста
  {              //до путой клетки
      Счет       //Если в клетке
                //ПРОБЕЛ, то она
//находится впереди слова. В нее
//помещаем число и обнуляем ЯЩИК для
//подсчета длины следующего слова.

     Длина_слова
 }
КОНЕЦ

ЭТО Счет
    ОБМЕН   //Если символ не является
    ПЛЮС    //пробелом, в ЯЩИК +1
    ОБМЕН
    ВЛЕВО
  ЕСЛИ НЕ ПРОБЕЛ ТО Счет
КОНЕЦ

ЭТО Количество_слов
  ВПРАВО
  ЕСЛИ ЦИФРА ТО
     {
       ОБМЕН
       ПЛЮС     //Если цифра, то к
       ОБМЕН  //ЯЩИКу добавляем 1
          }
 ЕСЛИ НЕ ПУСТО ТО Количество_слов
КОНЕЦ

ЭТО Поиск
 Влево
 Вправо
КОНЕЦ

ЭТО Влево
  ВЛЕВО
  Проверка
  ЕСЛИ НЕ ПУСТО ТО Влево
 КОНЕЦ

ЭТО Вправо
  ВПРАВО
  Проверка
  ЕСЛИ НЕ ПУСТО ТО Вправо
КОНЕЦ


ЭТО Проверка
  ЕСЛИ ЦИФРА ТО   //Если встретилась
     {           //цифра,
       МИНУС     //уменьшаем на 1.
         ЕСЛИ 0 ТО //Если получился 0,
            {
             ОБМЕН       //то уменьшаем
             МИНУС    //ЯЩИК на 1
               ЕСЛИ 0 ТО
                  {     //Если
//образовались два нуля, то вместо
//длины слова пишем "=", В ЯЩИК-"ф"
                    ПИШИ ф
                    ОБМЕН
                    ПИШИ =
                      }
                   ИНАЧЕ
                      {
                       ОБМЕН
                       ПИШИ ПРОБЕЛ
                   }
          }
 }
КОНЕЦ

ЭТО Самое_длинное
 ПОКА НЕ =
  {
   ВЛЕВО
      }
КОНЕЦ

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

Очень много проходов. На вашем тесте про котика я насчитал их больше
8.

Когда работа заканчивается перед записью появляется пробел, которого
там быть не должно.

Команда 3107
------------
.\07\07.txt
.\07\tura.kor
Оценка: 8.5
//-------------------------------------
// Задача а                            
// Найти самое длинное слово           
// Авторы решения: Шаблевская Л. и
// Алехина А.
//
//-------------------------------------
// Описание алгоритма:                 
// 1) подсчитываем и записываем после  
// слова количество цифр в нем;
// 2) определяем максимальную длину;   
// 3) удаляем все меньшие цифры;
// 4) находим максим. цифру и начало   
//    соответствующего слова.          
ЭТО вход
 количество  //окно в конце на первом  
             // пустом поле справа     
 ВЛЕВО       // на последнее поле      
 максим   // окно на первом пустом поле
          // слева в конце процедуры   
 поиск    // ищем максим. цифру и      
          // устанавливаем окно
КОНЕЦ                                  
//-------------------------------------
// Подсчет кол-ва букв в словах        
ЭТО количество
 ВПРАВО         // на начало текста
 ПОКА НЕ ПУСТО
  подсчет                              
КОНЕЦ                                  
//                                     
// Подсчет числа букв в слове
//                                     
ЭТО подсчет
 ОБМЕН                                 
 ПИШИ 0                                
 ОБМЕН // обнуление счетч.
 ПОКА НЕ ПРОБЕЛ                        
  {                                    
   ОБМЕН         // вызов счетчика     
   ПЛЮС          // +1 к счетчику      
   ОБМЕН         // убрать счетчик     
   ВПРАВО        // след. симвоп       
  }
 ЯЩИК-       // запись кол-ва на ленту 
 ВПРАВО      // к следующему слову     
КОНЕЦ                                  

//-------------------------------------
// Определение максим. цифры
ЭТО максим                             
 ПОКА НЕ ПУСТО                         
  {                                    
  ЕСЛИ ЦИФРА ТО
    {                // Если цифра     
   ЕСЛИ Я<Л ТО ЯЩИК+ // на ленте
                     // больше, чем в  
    ВЛЕВО            // ящике, то она  
    }                // копируется в
  ИНАЧЕ ВЛЕВО        // ящик           
  }                                    
                                       
КОНЕЦ         // в ящике макс. длина   
                                       
//-------------------------------------
// Поиск максимальной цифры, удаление
// всех остальных цифр и установка     
// на первую букву самого длинного     
// слова                               
ЭТО поиск
 ВПРАВО        // в начало текста
 ПОКА НЕ ПУСТО // сканирование справа
  {           // налево                
 ВПРАВО          // проверка цифр      
 ЕСЛИ ЦИФРА ТО   // на равенство макс. 
  ЕСЛИ Я#Л       // и удаление
   ТО            //                    
    ПИШИ ПРОБЕЛ  // остальных
  }                                    
 ПОКА НЕ ЦИФРА ВЛЕВО // поиск макс.    
                    // цифры
                    //(проходом слева  
                    // направо),       
 ПИШИ ПРОБЕЛ         // стирание цифры 
                                       
 начало              // в начало слова 
КОНЕЦ                                  

//-------------------------------------
// Программа установки окна в начало   
// самого длинного слова.              
// Отрабатывает две возможности нахож-
// дения этого слова: в начале и в
// середине фразы. Соответственно,
// предыдущим символом может быть      
// ПРОБЕЛ или ПУСТО. Выполняется       
// последовательная проверка каждого   
// варианта в режиме рекурсии.
ЭТО начало                             
ВЛЕВО          // На последнюю букву.
 ЕСЛИ НЕ ПУСТО // Проверка на первое   
  ТО           // слово.               
   {
   ЕСЛИ НЕ ПРОБЕЛ  // Проверка на      
    ТО    начало   // не первое слово. 
    ИНАЧЕ ВПРАВО   // На начало слова  
   }                                   
  ИНАЧЕ ВПРАВО     // На начало слова  
КОНЕЦ                                  

к о м м е н т а р и й  к у р а т о р а
Хорошее решение примерно за 3.5 прохода. Но у команды 3115 решение
еще лучше -- за 2.5 прохода!

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

Команда 3110
------------
.\10\10.txt
.\10\10a1.kor
Оценка: 7.5
ЭТО вход
считать_буквы //в каждом слове         
//количество букв записывается после   
//каждого слова                        
найти_большую_цифру //среди записанных 
//после слов                           
поставить_флаг //замена большей        
//цифры флагом и одновременное         
//стирание меньших цифр                
стереть_флаг
встать_на_начало_большего_слова        
КОНЕЦ
ЭТО считать_буквы
обнуление_счетчика                     
ПИШИ ПРОБЕЛ
ВПРАВО                                 
ПОКА НЕ ПУСТО счет_букв_слова          
КОНЕЦ                                  
ЭТО обнуление_счетчика                 
ПИШИ 0                                 
ОБМЕН                                  
КОНЕЦ                                  
ЭТО счет_букв_слова
ПОКА НЕ ПРОБЕЛ                         
{                                      
ВПРАВО                                 
ОБМЕН                                  
ПЛЮС                                   
ОБМЕН                                  
}                                      
обнуление_счетчика
ВПРАВО
КОНЕЦ                                  
ЭТО найти_большую_цифру
ВЛЕВО
ЯЩИК+
ВЛЕВО                                  
поиск_максимума                        
КОНЕЦ                                  
ЭТО поиск_максимума //выбирает         
//наибольшую из имеющихся цифр         
//и запоминает в ящике                 
ПОКА НЕ ПУСТО                          
{                                      
ВЛЕВО
ЕСЛИ НЕ ЦИФРА ТО поиск_максимума       
ИНАЧЕ ЕСЛИ Я<Л ТО ЯЩИК+                
}                                      
КОНЕЦ                                  
ЭТО поставить_флаг                     
ВПРАВО                                 
поиск_2                                
КОНЕЦ
ЭТО поиск_2 //ищет среди цифр
//равную имеющейся в ящике и по пути   
//стирает остальные цифры
ПОКА НЕ ПУСТО
{
ВПРАВО                                 
ЕСЛИ НЕ ЦИФРА ТО поиск_2               
ЕСЛИ Я=Л ТО ПИШИ |                     
ИНАЧЕ                                  
{                                      
ВПРАВО                                 
ЕСЛИ НЕ ПУСТО ТО                       
{                                      
ВЛЕВО
ПИШИ ПРОБЕЛ                            
}                                      
}                                      
}                                      
КОНЕЦ                                  
ЭТО стереть_флаг                       
ПОКА ПУСТО ВЛЕВО                       
ЕСЛИ НЕ | ТО ПИШИ ПРОБЕЛ
ПОКА НЕ | ВЛЕВО
ПИШИ ПРОБЕЛ                            
КОНЕЦ
ЭТО встать_на_начало_большего_слова
ВЛЕВО
ПОКА НЕ ПРОБЕЛ ВЛЕВО                   
проверка                               
КОНЕЦ                                  
ЭТО проверка //убирает лишний пробел,  
//появившийся в результате работы      
// программы                           
ВЛЕВО                                  
ЕСЛИ ПУСТО ТО                          
{                                      
ВПРАВО
ПИШИ ПУСТО                             
ВПРАВО                                 
}
ИНАЧЕ ПОВТОРИ 2 ВПРАВО                 
КОНЕЦ                                  

к о м м е н т а р и й  к у р а т о р а
Запись программы без структурных отступов, читать очень тяжело.
Решение за 3.5 прохода.
Когда в записи есть равные по длине слова, в записи остается мусор,
например, "вв|вв".

Команда 3113
------------
.\13\13.txt
.\13\1321.kor
Оценка: 0

Команда 3114
------------
.\14\14.txt
.\14\1421.kor
Оценка: 1

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

Команда 3115
------------
.\15\15.txt
Оценка: 9

Автор решения: Казанцев Лев.

  Описание алгоритма: Исполнитель производит рекурсивный счёт
 длины каждого слова, запоминает длину в ящике, а длину каждого
 следующего слова сравнивает с числом в ящике и в случае, если
 слово больше предыдущего, то он ставит после этого слова 
 пусто. После проверки исполнитель возвращается до первого
 пусто, ставит пробел и идёт к началу слова.

Программа, описание программы

ЭТО Вход
 ВПРАВО                                
 ПОКА НЕ ПУСТО {                       
                Счет       //Процедура счёта длины слова.         
                Сравнение  //Сравнение с предыдущим словом.
                ВПРАВО                 
               }                       
 Длинное_слово     //Процедура возврата к самому длинному слову.                
                                       
КОНЕЦ                                  
                                       
ЭТО Сравнение
 ЕСЛИ Я<Л ТО {        //Сравнение длин слов в ящике и на ленте.
              ОБМЕН                    
              ПИШИ ПУСТО            //В случае, если ящик
              ВЛЕВО                 //меньше ленты, то запись  
              ПОКА НЕ ПУСТО ВЛЕВО   //пусто и пробела перед   
              ПИШИ ПРОБЕЛ           //предыдущим словом.   
              ПОКА НЕ ПУСТО ВПРАВО     
             }                         
          ИНАЧЕ ПИШИ ПРОБЕЛ     //Восстановление пробела.                 
КОНЕЦ                                  

                                       
ЭТО Счет                               
 ЕСЛИ НЕ ПРОБЕЛ             //Рекурсивный отсчёт длины           
  ТО { ВПРАВО Счет ПЛЮС }   //слова запись её на ленту.
  ИНАЧЕ ПИШИ 0                          
КОНЕЦ                                  
                                       
ЭТО Длинное_слово                      
 ВЛЕВО                                 
 ПОКА НЕ ПУСТО ВЛЕВО                   
 ПИШИ ПРОБЕЛ           //Восстановление пробела.
 ВЛЕВО
 ПОКА НЕ ПРОБЕЛ ВЛЕВО   //Поход к началу слова.               
 ВЛЕВО                                 
 ЕСЛИ ПУСТО             //В случае, если длинное слово первое,      
  ТО { ВПРАВО ПИШИ ПУСТО ВПРАВО } //то стирание перед ним пробела.   
 ИНАЧЕ ПОВТОРИ 2 ВПРАВО                
КОНЕЦ                                  

к о м м е н т а р и й  к у р а т о р а
Решение в 2.5 прохода. Рекорд среди всех решений этой задачи.
