Задача 4. (8 баллов) Опрокидывание столбика.
На поле исполнителя из кубиков собран вертикальный столбик.
Исполнитель расположен слева перед первым кубиком основания:

  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │ │ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │5│ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │4│ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │3│ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │2│ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │¤│1│ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─

"Опрокинуть" столбик на горизонталь так, чтобы кубик, расположенный
в основании остался на месте:

  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │ │ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │ │ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │ │ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │ │ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │ │ │ │ │ │ │ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─
   │¤│1│2│3│4│5│ │ │ │
  ─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─

Дополнительные условия:

1) Поле исполнителя бесконечно по всем четырем направлениям.
2) Число кубиков в исходном столбике не меньше двух.
3) Надписи на кубиках могут быть любыми.

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

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


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

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

п р о г р а м м а
ЭТО ОПРОКИДЫВАНИЕ
 ВВЕРХ                                 
 ВПРАВО                                
 ВЛЕВО                                 
 ВВЕРХ                                 
 ПОВТОРИ 2 ВПРАВО                      
 ПОВТОРИ 2 ВЛЕВО                       
 ВВЕРХ                                 
 ПОВТОРИ 3 ВПРАВО                      
 ПОВТОРИ 3 ВЛЕВО                       
 ВВЕРХ                                 
 ПОВТОРИ 4 ВПРАВО                      
 ВВЕРХ                                 
 ВПРАВО                                
 ПОВТОРИ 4 ВНИЗ                        
 ПОВТОРИ 3 ВВЕРХ
 ВЛЕВО
 ПОВТОРИ 3 ВНИЗ                        
 ПОВТОРИ 2 ВВЕРХ                       
 ВЛЕВО
 ПОВТОРИ 2 ВНИЗ                        
 ВВЕРХ                                 
 ВЛЕВО
 ВНИЗ                                  
 ПОВТОРИ 2 ВЛЕВО                       
 ВНИЗ                                  
КОНЕЦ

к о м м е н т а р и й  к у р а т о р а
Частное решение.

Команда 3102
------------
.\02\02.txt
.\02\0243.coc

Оценка: 1

Авторы решения:
Серебренников Михаил. А.
Перевалова А. А.
Хасиева Екатерина. О.

а л г о р и т м
Нет описания.

п р о г р а м м а
  ЭТО Опрокидывание                    

ВВЕРХ                                  
ВПРАВО                                 
ВЛЕВО                                  
ВВЕРХ                                  
ПОВТОРИ 2 ВПРАВО                       
ПОВТОРИ 2 ВЛЕВО                        
ВВЕРХ                                  
ПОВТОРИ 3 ВПРАВО                       
ПОВТОРИ 3 ВЛЕВО                        
ВВЕРХ                                  
ПОВТОРИ 4 ВПРАВО
ПОВТОРИ 4 ВЛЕВО                        
ВВЕРХ                                  
ПОВТОРИ 5 ВПРАВО                       
ПОВТОРИ 5 ВЛЕВО                        
ВВЕРХ                                  
ПОВТОРИ 6 ВПРАВО                       
ВВЕРХ                                  
ВПРАВО                                 
ПОВТОРИ 6 ВНИЗ                         
ПОВТОРИ 5 ВВЕРХ
ВЛЕВО
ПОВТОРИ 5 ВНИЗ                         
ПОВТОРИ 4 ВВЕРХ                        
ВЛЕВО                                  
ПОВТОРИ 4 ВНИЗ                         
ПОВТОРИ 3 ВВЕРХ                        
ВЛЕВО                                  
ПОВТОРИ 3 ВНИЗ                         
ПОВТОРИ 2 ВВЕРХ                        
ВЛЕВО                                  
ПОВТОРИ 2 ВНИЗ                         
ВВЕРХ
ВЛЕВО                                  
ВНИЗ                                   
ПОВТОРИ 2 ВЛЕВО                        
ВНИЗ                                   

  КОНЕЦ                                

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

Частное решение.

Команда 3108
------------
.\08\08.txt
.\08\0841.coc

Оценка: 5

Авторы: Шарапов Андрей, Сухаренко Маша

Описание алгоритма: исполнитель ищет последний кубик столбика, после
чего возвращается на кубик выше первого и сдвигает часть столбика
выше первого кубика на 1 клетку вправо. Опять ищет последний кубик
и возвращается на кубик выше второго, опять сдвигает часть столбика...
Так лр тех пор, пока в столбике есть хоть один кубик. Затем Кукарача
устанавливает последний кубик полученной таким образом лесенки на
горизонталь. Проверяет, нет ли слева кубика (это условие окончания
установки кубиков на горизонталь), если нет, идет вверх, отыскивая
очередной кубик. Последний кубик устанавливает, выполняя линейную
процедуру, так как легко определяется относительное положение этого
кубика.   
                                 
п р о г р а м м а
                                
ЭТО СТОЛБИК                            
ЛЕСЕНКА                                
УСТАНОВКА
КОНЕЦ                                  
ЭТО ЛЕСЕНКА //Кубики столбика распо-   
//ложить "лесенкой".                   
ВВЕРХ                                  
ВПРАВО
ЕСЛИ НЕ ПУСТО ТО                       
{
 СЧЕТ                                  
 ЛЕСЕНКА                               
}                                      
ИНАЧЕ ВВЕРХ                            
ВНИЗ //Установка последнего кубика
//"лесенки" на горизонталь             
КОНЕЦ                                  
ЭТО СЧЕТ //Рекурсивные сдвиги очеред   
//ной "уменьшенной" части столбика на  
//одну клетку вправо                   
ЕСЛИ НЕ ПУСТО                          
ТО                                     
{                                      
ВЛЕВО                                  
ВВЕРХ
ВПРАВО                                 
СЧЕТ                                   
}                                      
ИНАЧЕ  ВВЕРХ                           
ВНИЗ //Установка очередной ступени
//лесенки.                             
КОНЕЦ
ЭТО УСТАНОВКА //Установка кубиков      
//лесенки на горизонталь.              
ВЛЕВО                                  
ЕСЛИ ПУСТО ТО //Проверка конца стол-
//бика.
{                                      
ВНИЗ                                   
ПОСТАВИТЬ                              
УСТАНОВКА                              
}                                      
ИНАЧЕ ПОСТАВИТЬ_2
КОНЕЦ                                  
ЭТО ПОСТАВИТЬ //Поиск очередного куби- 
//ка.                                  
ВВЕРХ
ЕСЛИ ПУСТО ТО ПОСТАВИТЬ                
ИНАЧЕ                                  
{                                      
ВПЕРЕД  //Исполнитель "ныряет" по ку-  
ПОВТОРИ 2 ВВЕРХ //бик, оказываясь
НАЗАД           //сверху.              
ВНИЗ
}                                      
ВНИЗ  //Установка кубика на горизон-   
//таль.                                
КОНЕЦ                                  
ЭТО ПОСТАВИТЬ_2 //Установка послед-
//него кубика (первый стоит на месте)  
ВВЕРХ                                  
ПОВТОРИ 2 ВЛЕВО                        
ВНИЗ                                   
ВПРАВО                                 
ВВЕРХ
ВПРАВО                                 
ВНИЗ                                   
КОНЕЦ                                  

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

Программа не работает когда в столбике один или два кубика.

Команда 3110
------------
.\10\10.txt
.\10\1041.coc

Оценка: 7.5

Описание алгоритма:
Кукарача при каждом проходе ищет вершину столбика, одновременно сдвигая
кубики (каждый раз на один кубик меньше) вправо и затем толкая весь столбик
на новое место.

п р о г р а м м а
ЭТО Перемена
ВВЕРХ                                  
ВПРАВО                                 
Ход                                    
КОНЕЦ                                  
ЭТО Ход                                
Правка                                 
ВПРАВО
ЕСЛИ НЕ ПУСТО
ТО Ход                                 
КОНЕЦ                                  
ЭТО Правка
ВЛЕВО                                  
ВВЕРХ                                  
ВПРАВО                                 
ЕСЛИ НЕ ПУСТО ТО Правка                
ИНАЧЕ Проход                           
ВНИЗ                                   
КОНЕЦ                                  
ЭТО Проход                             
ВПРАВО                                 
ВНИЗ                                   
ВЛЕВО                                  
ВВЕРХ                                  
КОНЕЦ                                  
                                       
к о м м е н т а р и й  к у р а т о р а

Программа работает правильно. Замечания только к ее внешнему виду.


Команда 3113
------------
.\13\13.txt
.\13\1013.coc

Оценка: 7.5

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

Решение                 
ЭТО столбик            |  
ВВЕРХ                  | Шаг вверх рядом со столбиком             
ВПРАВО                 | Толкаем второй кубик вправо             
путь                   | Проверяем есть ли кубик             
ВЛЕВО                  | Возвращаемся в исходное
ВНИЗ                   | положение.
КОНЕЦ                  |              
ЭТО путь               |
ЕСЛИ НЕ ПУСТО ТО иди   | Если кубика нет, то выполняем иди             
ВПРАВО                 | Сдвигаем кубик вправо
ЕСЛИ НЕ ПУСТО ТО путь  | Если кубика нет, то выполняем путь            
ВЛЕВО                  | Рекурсивная пружинка             
КОНЕЦ                  |              
ЭТО иди                | Проверяем наличие кубиков
ЕСЛИ НЕ ПУСТО ТО шаг   | Если кубик есть, то выполняем шаг             
ИНАЧЕ выход            |      кубиков нет, выполняем выход         
КОНЕЦ                  |
ЭТО шаг                | Идем к следующему кубику             
ВЛЕВО                  | Возвращаемся в левый столбик              
ВВЕРХ                  | Поднимаемся на клетку вверх
ВПРАВО                 | Толкаем следующий кубик             
иди                    | Проверяем наличие кубиков             
ВНИЗ                   | Рекурсивная пружинка             
КОНЕЦ                  |              
ЭТО выход              | Сдвигаем новый столбик вниз            
ВПРАВО                 | Встаем над получившимся столбиком             
ВНИЗ                   | Сдвигаем его вниз
ВЛЕВО                  | Становимся с лева от столбика             
ВВЕРХ                  | Компенсируем один шаг рекурсивной пружины             
КОНЕЦ

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

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

Команда 3114
------------
.\14\14.txt

Оценка: 0

Нет решения.

Команда 3115
------------
.\15\15.txt
.\15\1511.coc

Оценка: 8

Задача 4. Решение 1541.
Решал: Филиппов Василий

Описание алгоритма:
Кукарача, не трогая первого кубика, начинает считать шаги не с
первого кубика, а со второго.
Он толкает кубики вправо (программа"Шаг"), пока не натыкается на пустоту,
при этом рекурсия запоминает количество шагов.
Потом он сдвигает получившийся столбик вниз (программа"Толчок")
и возвращается к основанию отложенной командой ВНИЗ.
Эти действия рекурсивно повторяются, пока не опрокинется весь
столбик. Исполнитель возвращается в исходное положение благодаря
отложенным командам ВЛЕВО. 

ЭТО Свали                              
 ВВЕРХ                                 
 Переверни                             
 ВНИЗ                                  
КОНЕЦ // Свали                         

ЭТО Переверни                          
 ВПРАВО                                
 ЕСЛИ НЕ ПУСТО                         
  ТО                                   
   {                                   
    Подставь                           
    Переверни                          
   }                                   
 ВЛЕВО                                 
КОНЕЦ // Переверни                     

ЭТО Подставь                           
 Шаг
 ЕСЛИ НЕ ПУСТО
  ТО                                   
  {                                    
    Подставь                           
    ВНИЗ                               
  }                                    
  ИНАЧЕ Толчок                         
КОНЕЦ // Подставь                      

ЭТО Шаг                                
 ВЛЕВО                                 
 ВВЕРХ                                 
 ВПРАВО                                
КОНЕЦ // Шаг                           

ЭТО Толчок                             
 ВПРАВО                                
 ВНИЗ                                  
 ВЛЕВО                                 
КОНЕЦ // Толчок                        

Решение 1542
Автор: Плотников Евгений
Описание алгоритма и программа

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


к о м м е н т а р и й  к у р а т о р а
Обе программы работают правильно. Замечаний нет.


Команда 3118
------------
.\18\18.txt
.\18\1841.coc

Оценка: 1
Автор решения: Зудилов Игорь

п р о г р а м м а
//-------------------------------------
ЭТО Опрокидование                      
   {                                   
   ВВЕРХ                               
   ВПРАВО                              
   ВЛЕВО                               
   }                                   
  ПОКА НЕ ПУСТО                        
  Опрокидование                        
  Помощь                               
КОНЕЦ // Опрокидование                 
//-------------------------------------
ЭТО Помощь                             
   ВВЕРХ                               
   ВПРАВО                              
   ЕСЛИ       3 ТО                     
   {                                   
   ВПРАВО                              
   Шаг                                 
   }                                   
   ИНАЧЕ ЕСЛИ 4 ТО                     
   {                                   
   ПОВТОРИ 2 ВПРАВО                    
   Шаг1                                
   }                                   
   ИНАЧЕ ЕСЛИ 5 ТО                     
   {
   ПОВТОРИ 3 ВПРАВО                    
   Шаг2                                
   }                                   
   ИНАЧЕ ЕСЛИ 6 ТО                     
   {                                   
   ПОВТОРИ 4 ВПРАВО                    
   Шаг3                                
   }                                   
   ИНАЧЕ ЕСЛИ 7 ТО                     
   {                                   
   ПОВТОРИ 5 ВПРАВО                    
   Шаг4                                
   }                                   
   ИНАЧЕ ЕСЛИ 8 ТО                     
   {                                   
   ПОВТОРИ 2 ВПРАВО                    
   Шаг5                                
   }                                   
   ИНАЧЕ ЕСЛИ 9 ТО                     
   {                                   
   ПОВТОРИ 7 ВПРАВО                    
   Шаг6
   }                                   
   ВПРАВО                              
   Опрокидование2                      
КОНЕЦ // Помощь                        
//-------------------------------------
ЭТО Опрокидование2                     
  ПОВТОРИ 4 ВНИЗ                       
  ПОВТОРИ 2 ВВЕРХ                      
  ВПРАВО                               
  ПОВТОРИ 2 ВНИЗ                       
  ПОВТОРИ 3 ВВЕРХ                      
  ВПРАВО                               
  ПОВТОРИ 3 ВНИЗ                       
  ПОВТОРИ 4 ВВЕРХ                      
  ВПРАВО                               
  ПОВТОРИ 4 ВНИЗ                       
  ПОВТОРИ 5 ВЛЕВО                      
  ВНИЗ                                 
КОНЕЦ // Опрокидование2                
//-------------------------------------
ЭТО Шаг                                
  ПОВТОРИ 2 ВЛЕВО
  Помощь                               
КОНЕЦ // Шаг                           
//-------------------------------------
ЭТО Шаг1                               
  ПОВТОРИ 3 ВЛЕВО                      
  Помощь                               
КОНЕЦ // Шаг1                          
//-------------------------------------
ЭТО Шаг2                               
  ПОВТОРИ 4 ВЛЕВО                      
  Помощь                               
КОНЕЦ // Шаг2                          
//-------------------------------------
ЭТО Шаг3                               
  ПОВТОРИ 5 ВЛЕВО                      
  Помощь                               
КОНЕЦ // Шаг3                          
//-------------------------------------
ЭТО Шаг4                               
  ПОВТОРИ 6 ВЛЕВО                      
  Помощь                               
КОНЕЦ // Шаг4
//-------------------------------------
ЭТО Шаг5                               
  ПОВТОРИ 7 ВЛЕВО                      
  Помощь                               
КОНЕЦ // Шаг5                          
//-------------------------------------
ЭТО Шаг6                               
  ПОВТОРИ 8 ВЛЕВО                      
  Помощь                               
КОНЕЦ // Шаг6                          

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

Программа не работает.

