Задача d (10 баллов)

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


До выполнения программы

  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │¤│*│ │ │ │ │ │ │   │ │¤│*│*│ │ │ │ │ │   │ │¤│*│*│*│ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼

После выполнения программы

  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │¤│ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │¤│ │ │ │ │   │ │ │ │ │*│ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │¤│ │ │ │ │ │   │ │ │ │*│ │ │ │ │ │   │ │ │ │*│ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │*│ │ │ │ │ │ │   │ │ │*│ │ │ │ │ │ │   │ │ │*│ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
  │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │   │ │ │ │ │ │ │ │ │ │
  ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼   ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼


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

Это решение -- легкая модификация решения задачи c.
Смотрите замечания и пояснения к задаче c.


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


                             * * *

Команда 3101
------------
Оценка: 10
.\01\01.txt
Автор решения: Кудрявцев Артём

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

                         Процедура Лесенка
Сначала исполнитель проверяет, есть ли второй кубик.
Если есть, то Кукарача исполняет процедуру Ряд_вверх
до тех пор, пока не кончатся кубики.
Когда кончатся кубики (или когда второго кубика нет),
Кукарача становится на место еще одной ступеньки.

                       Процедура Ряд_вверх
В процедуре Ряд_вверх Кукарача сдвигает оставшиеся справа кубики
на строку вверх и с помощью рекурсии возвращается в начало ряда. 


программа

ЭТО Лесенка                            
  ВНИЗ
  ПОВТОРИ 2 ВПРАВО                     
  ВВЕРХ
  ПОКА НЕ ПУСТО
  { Ряд_вверх
    ВВЕРХ
  }
  ВВЕРХ                                
КОНЕЦ // Лесенка                       
//-------------------------------------
ЭТО Ряд_вверх                          
  ВНИЗ
  ВПРАВО                               
  ВВЕРХ
  ЕСЛИ НЕ ПУСТО                        
   ТО                                  
    { Ряд_вверх                        
      ВЛЕВО                            
    }                                  
КОНЕЦ // Ряд_вверх                     


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

Нет замечаний.

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

программа
- - - - -
ЭТО ЛЕСЕНКА
 ПОВТОРИ 2                             
          {                            
           ВВЕРХ ВПРАВО ВНИЗ           
          }                            
 ЕСЛИ * ТО СЧЕТ                        
 // Установка последней ступеньки и    
 // исполнителя на место               
 // дополнительной ступеньки           
 ВВЕРХ ВЛЕВО                           
 ПОВТОРИ 3 ВНИЗ
 ВПРАВО                                
КОНЕЦ
                                       
ЭТО СЧЕТ
 // Подсчет количества * минус одна
 ВВЕРХ ВПРАВО ВНИЗ                     
 ЕСЛИ * ТО СЧЕТ                        
  ИНАЧЕ ВНИЗ
 // Отложенная команда будет выполнена 
 // на один раз меньше кол-ва
 // ступенек                           
 УСТАНОВКА_СТУПЕНЕК
КОНЕЦ                                  
                                       
ЭТО УСТАНОВКА_ОДНОЙ_СТУПЕНЬКИ          
 // Установка исполнителя к крайней    
 // левой * ряда                       
 ВВЕРХ ВЛЕВО ВНИЗ                      
 ЕСЛИ * ТО УСТАНОВКА_ОДНОЙ_СТУПЕНЬКИ   
  // Установка исполнителя над         
  // крайней левой * ряда              
  ИНАЧЕ ВПРАВО
 // Отложенная команда, сдвигает       
 // очередную * вниз, образуя
 // ступеньку                          
 ВНИЗ
КОНЕЦ
                                       
ЭТО УСТАНОВКА_СТУПЕНЕК                 
 // Установка исполнителя под левую
 // крайнюю * ряда                     
 УСТАНОВКА_ОДНОЙ_СТУПЕНЬКИ
 ВПРАВО ВВЕРХ                          
 ПОКА ПУСТО ВВЕРХ
 РЯД_НА_МЕСТО                          
 ВВЕРХ                                 
КОНЕЦ                                  

ЭТО РЯД_НА_МЕСТО                       
 ВНИЗ ВПРАВО ВВЕРХ                     
 ЕСЛИ * ТО РЯД_НА_МЕСТО                
КОНЕЦ                                  

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

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

2) Программа работает правильно, но не оптимально.


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

программа
- - - - -

ЭТО Лесенка
    // В клетку (10,2)
    ВПРАВО
    // В клетку (3,9)
    ПОВТОРИ 7 СТРОКА
    // В правый верхний угол
    ПОВТОРИ 2 ВВЕРХ
    ВПРАВО
КОНЕЦ
// Переместить все символы, расположен-
// ные выше и правее Кукарачи, на одну
// строку вверх.
ЭТО СТРОКА
    ВВЕРХ
    ЕСЛИ Г
      ТО    Ступень
      ИНАЧЕ Коррекция
    ВЛЕВО
КОНЕЦ
// Подвод исполнителя
ЭТО Коррекция
  ПОВТОРИ 2 ВПРАВО
КОНЕЦ
// Переместить один символ на строку
// вверх.
ЭТО Ступень
    ВНИЗ
    ВПРАВО
    СТРОКА
КОНЕЦ

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

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

2) Решалась другая задача. Команда типа

ПОВТОРИ 7 СТРОКА

не может быть использована в задачах с варьируемыми данными. А что если
кубиков на поле будет не 7, а 27?


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

описание  алгоритма
- - - - - - - - - -
     Толкаем второй символ и все последующие за ним на одну строку
вверх. При этом закручиваем пружину для возврата. Закручиваем ее
пока не встретим символ ПУСТО. Потом возвращаемся - раскручивая
пружину. Алгоритм повторяем снова.

программа
- - - - -
ЭТО ОДИН                               
ВНИЗ                                   
ВПРАВО                                 
ПОЛОСА                                 
КОНЕЦ
                                       
ЭТО ПОЛОСА
ВПРАВО                                 
ВВЕРХ                                  
ЕСЛИ НЕ ПУСТО ТО
                 {
                  ПРОВЕРКА
                  ПОЛОСА
                 }
                                       
ИНАЧЕ ВВЕРХ
КОНЕЦ                                  

ЭТО ПРОВЕРКА                           
СИМВОЛ                                 
ЕСЛИ НЕ ПУСТО ТО ПРОВЕРКА
ВЛЕВО                                  
КОНЕЦ

ЭТО СИМВОЛ                             
ВНИЗ                                   
ВПРАВО
ВВЕРХ                                  
КОНЕЦ

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

Очень хорошо! Есть лишние движения, от которых можно избавиться, но
решение в целом очень хорошее.


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

описание  алгоритма
- - - - - - - - - -
1. Поднять первый символ текущего ряда на 1 клетку вверх.

2. Оставшийся (не пустой) ряд поднять на 1 клетку вверх и вернуться
под первый символ этого ряда и поставить его на ступеньку в 1 шаг.

3. Повторять пункт 2 до тех пор пока цепочка символов не кончится.

4. Поставить Кукарачу на последнюю ступеньку.


ЭТО Работа
 Шаг_вперед
 ПОКА НЕ ПУСТО { Лестница ВВЕРХ }
 ВВЕРХ                                 
КОНЕЦ
                                       
ЭТО Лестница
 Шаг_вперед        //Поднять на 1 шаг вверх
 ЕСЛИ НЕ ПУСТО                         
  ТО  {
       Лестница                        
       ВЛЕВО       //Вернуться к первому символу вышестоящей строки
      }
КОНЕЦ
                                       
ЭТО Шаг_вперед                         
 ВНИЗ
 ВПРАВО                                
 ВВЕРХ
КОНЕЦ                                  
                                       
комментарий  куратора
- - - - - - - - - - -

К решению нет замечаний.

Команда 3107
------------
Оценка: 2
.\07\07.txt
Автор решения Смирнова Лена
     Программа

     ЭТО лесенка
     ВВЕРХ ВПРАВО ВНИЗ
     ЕСЛИ ¤ ТО сдвиг1
     ИНАЧЕ СТОЯТЬ
     ЕСЛИ ¤ ТО сдвиг2
     ИНАЧЕ СТОЯТЬ
     ЕСЛИ ¤ ТО сдвиг3
     ИНАЧЕ СТОЯТЬ
     КОНЕЦ

     ЭТО сдвиг1
     ВВЕРХ ВПРАВО ВНИЗ
     КОНЕЦ

     ЭТО сдвиг2
     ВЛЕВО ВНИЗ ВВЕРХ ВПРАВО
     сдвиг1
     КОНЕЦ

     ЭТО сдвиг3
     ВЛЕВО ВНИЗ ВВЕРХ ВЛЕВО ВНИЗ ВНИЗ ВВЕРХ ВВЕРХ ПОВТОРИ 3 ВПРАВО
     КОНЕЦ

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

  Программа решает только частные случаи.

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

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

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

Команда 3111
------------
Оценка: 9
.\11\11.txt
Автор: Килеев Слава

описание  алгоритма
- - - - - - - - - -
1.Встать под вторым символом.

2.Поднять 1 ряд символов, и встать под следующий символ ряда

3.Поднять так 2-ой, 3-й и следующие ряды, пока не станет пусто при
помощи рекурсивного алгоритма "Ступень".

3.Встать на клетку выше.

программа
- - - - -

ЭТО Лесенка                            
 Подход  // Для подхода ко второму     
//                             символу.
 ПОКА НЕ ПУСТО { Ступень ВВЕРХ }       
 ВВЕРХ // Коректирует                  
//                  положение Кукарачи.
КОНЕЦ // Лесенка                       
//-------------------------------------
// Для подхода ко второму символу.
ЭТО Подход                             
 ВНИЗ                                  
 ПОВТОРИ 2 ВПРАВО                      
 ВВЕРХ                                 
КОНЕЦ // Подход                        
//-------------------------------------
// Для поднятия строки на клетку вверх.

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

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

Отличная программа! Есть мелкая неоптимальность -- можно уменьшить
число движений, обойдясь без коррекции.

Команда 3112
------------
Оценка: 8
.\12\12.txt
Задача имеет два варианта решения.

1 вариант
Авторы: Медведева Анна, Белова Даша, Парфенов Саша

//-------------------------------------
// главная программа
ЭТО лестница
  задача                ────────────────┐
  ВВЕРХ                                 │
  ЕСЛИ НЕ * ТО                          │
  ИНАЧЕ вариант         ────────────────┼──┐
  ВВЕРХ // установка кукарачи           │  │
КОНЕЦ // лестница                       │  │
//------------------------------------- │  │
// подъем звездочек начиная со второй   │  │
ЭТО вариант               <─────────────┼──┘<──┐
  задача                     ───────────┼──┐   │
  ВЛЕВО ВВЕРХ                           │  │   │
  ЕСЛИ * ТО вариант       ──────────────┼──┼───┘
КОНЕЦ // вариант                        │  │
//------------------------------------- │  │
// проверка колличества звездочек       │  │
ЭТО задача                 <────────────┘<─┘<──┐
  ВНИЗ ВПРАВО ВВЕРХ                            │
  ЕСЛИ * ТО задача         ────────────────────┘
  ИНАЧЕ откат                 ─────────────┐
  ВЛЕВО  //установка кукарачи под          │
//второй звездочкой                        │
КОНЕЦ // задача                            │
//-------------------------------------    │
// ослабление рекурсивной пружины          │
// на 2 шага                               │
ЭТО откат                 <────────────────┘
  ВПРАВО ВПРАВО
КОНЕЦ // откат


2 вариант
Автор: Громков Сергей

//-------------------------------------
// описание
ЭТО ЗАДАЧА          <──────────────────────────┐
ВВЕРХ                                          │
 ЕСЛИ *                                        │
  ТО    УСТ       ─────────────────────────┐   │
  ИНАЧЕ ВВЕРХ                              │   │
КОНЕЦ                                      │   │
//-------------------------------------    │   │
// УСТанавливает КУКАРАЧУ снизу под *      │   │
// и выполняет проверку, в                 │   │
// рекурсивную пружину "ЗАДАЧА"            │   │
ЭТО УСТ                            <───────┘   │
  ВНИЗ ВПРАВО                                  │
  ПРОВЕРКА           ──────────────────────┐   │
  ЗАДАЧА             ──────────────────────┼───┘
КОНЕЦ // Имя                               │
//-------------------------------------    │
// Проверяет если * то переходит к         │
// проверке следующего кубика и заносит    │
// в рекурсивную пружину "ВЛЕВО"           │
//                                         │
ЭТО ПРОВЕРКА            <──────────────────┘<─────┐
ВВЕРХ                                             │
 ЕСЛИ *                                           │
  ТО    УСТ1           ────────────────────┐      │
  ИНАЧЕ ВПРАВО                             │      │
  ВЛЕВО                                    │      │
КОНЕЦ // Имя                               │      │
//-------------------------------------    │      │
// переводит КУКАРАЧУ к след. кубику       │      │
ЭТО УСТ1                 <─────────────────┘      │
ВНИЗ ВПРАВО ПРОВЕРКА     ─────────────────────────┘
КОНЕЦ // Имя

комментарий  куратора
- - - - - - - - - - -
1) Нет общего описания алгоритма.

2) По числу движений исполнителя -- первый варинт оптимальнее.

Оба решения правильные и хорошие.

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