Problem Set 1: Карл

Objectives

  • Показать, насколько хорошо вы освоили алгоритмическое мышление и работу робота Карла.
  • Научиться систематически формулировать каркас и логику программы, саму программу и комментарии к ней.
  • Освоиться в системе контроля версий git.

Git

Прежде чем вы перейдете к самому заданию, ознакомьтесь с системой Git, благодаря которой будет осуществляться сдача вашего текущего (позднее, и других) задания. В вашем распоряжении короткая лабораторная работа, в рамках которой вы сможете настроить систему Git: Version Control (RU).

Task 1: Ориентированный забег

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

При сдаче не забудьте, что вам следует указать файл карты task_1.kw в функции turnOn().

Начальная позиция

Изначально Карл находится где-то на полосе с препятствиями и смотрит на восток.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   EAST       1         0
ST.+---------------------------------------+
 6 | .   .   .   .   .   .   .   .   .   . |
   |                   +                   |
 5 | .   .   .   .   . | .   .   .   .   . |
   |                   |   +-------+       |
 4 | .   .   .   .   . | . | .   . | .   . |
   |                   |   |       |       |
 3 | .   .   .   .   . | . | .   . | .   . |
   |   +-----------+   |   |       |   +   |
 2 | . | .   .   . | . | . | .   . | . | . |
   |   |           |   |   |       |   |   |
 1 | > | .   .   . | . | . | .   . | 1 | . |
   +---------------------------------------+
     1   2   3   4   5   6   7   8   9   10  AVE.

Конечная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   WEST       2         0
ST.+---------------------------------------+
 6 | .   .   .   .   .   .   .   .   .   . |
   |                   +                   |
 5 | .   .   .   .   . | .   .   .   .   . |
   |                   |   +-------+       |
 4 | .   .   .   .   . | . | .   . | .   . |
   |                   |   |       |       |
 3 | .   .   .   .   . | . | .   . | .   . |
   |   +-----------+   |   |       |   +   |
 2 | . | .   .   . | . | . | .   . | . | . |
   |   |           |   |   |       |   |   |
 1 | < | .   .   . | . | . | .   . | . | . |
   +---------------------------------------+
     1   2   3   4   5   6   7   8   9   10  AVE.

Assessment

Это задание оценивается макс. 1 б. Его несложно выполнить, но оно заставляет задуматься о совершенно других вещах:

  • как освоить работу в системе контроля версий git.
  • проверка решений на разнообразных позициях, как изначальных, так и конечных.

Warning

Оценивается каждый значок, позиция и направление робота.

Warning

Сдавая код, не забудьте указать корректный файл карты task_1.kw в turnOn().

Task 2: Проблема

От практикующего получите номер вашего задания для Карла.

Создайте программу, для решения задачи. Помните использовать переменные не разрашено. Сдайте задание на git до 28.10.2018. Подробно процесс сдачи описан ниже.

Сдавая код, не забудьте указать корректный файл карты task_1.kw в turnOn().

Список заданий находится в конце странице.

Assessment

Задание max. 7 баллoв.

Warning

Оценивается каждый значок, позиция и направление робота.

Warning

Сдавая код, не забудьте указать корректный файл карты task_1.kw в turnOn().

Minimal Requirements to Succeed

  • Проект должен быть сдан и загружен в репозиторий на git git.kpi.fei.tuke.sk (см. ниже).
  • Во время компиляции любые ошибки недопустимы. Сборка проекта будет осуществляться компилятором gcc со следующими параметрами:
gcc -std=c11 -Werror -Wall -lkarel -lcurses
  • В конечном решении не могут использоваться переменные.
  • Сдавая код, не забудьте указать корректный файл карты task_1.kw (task_2.kw) в turnOn().

Project Submission

Имплементацию задания сдайте до 28.10.2018. Последний тесты пройдут в полночь.

Задание сдаётся в системе котороля версий Git на сервере git.kpi.fei.tuke.sk. Перед тем, как перейти к выполнению задания, вам следует ознакомиться с работой на git. Для этого пройдите краткую лабораторную работу: Version Control (RU).

Название вашего проекта в репозитории должно быть в формате: zap-2018.

Папки и файлы в проекте должны иметь соответствующую структуру:

.
├── ps1
│   ├── README
│   └── task_1.c
│   └── task_2.c
└── README

У каждого из файлов своё значение:

  • README или же README.md - файл, в котором будет указана группа, которую вы посещаете:
GROUP : C1
  • /ps1/README или же /ps1/README.md - файл, в котором будет указан номер задачи в рамках 2го задания, который вам присудит практикующий:
PROBLEM : 3
  • /ps1/task_1.c - Код программы для первой задачи - Ориентированный забег.
  • /ps1/task_2.c - Код программы для второй задачи (номер которой вам сообщит практикующий).

Warning

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

Comment

Если в прокте будут находиться сторонние файлы, это не будет считаться ошибкой.

Warning

Имена файлов, каталогов, также содержание README или же README.md чувствительны к регистру

Comment

Имя файла с номером задания может быть README или README.md. При этом в одном каталоге может находиться только один из них!

Assessment and Testing

Задание оценивается max. 8 баллами, из которых макс. 1 балл за первую задачу, макс. 7 баллов за вторую задачу. Количество баллов которые вы получите будет обусловлено результатами тестов, которые будет выполнены над вашим заданием. Будут проверяться:

  • Иерархия файлов (все ли обязательные файлы находятся в проекте).
  • Работоспособность вашей имплементации.

Проект будет собран с помощью компилятора gcc со следующими параметрами:

gcc -std=c11 -Werror -Wall -lkarel -lcurses

Ошибкой будет считаться:

  • Использование переменных.
  • Появление ошибок во время компиляции (любой warning интерпретируется как ошибка).
  • Любой failed test.

Тесты будут запускаться каждые 3 часа, а именно: 0300, 0600, 0900, 1200, 1500, 1800, 2100 и 2400.

Код будет испытан на оригинальность. Потому при выполнении заданий придерживайтесь этического кодекса! Выявление плагиата повлечет за собой исключение с предмета!

Problems to be Solved

01: Сортирование 1

Ваше задание будет заключаться в обучении робота Карла сортировать колонки, состоящие из значков в порядке убывания (с наибольшей до наименьшей). Каждый колонка берёт своё начало на самом нижнем ряду мира и построена из значков, находящейся в ней. Иными словами, если степень колонки 7, это означает, что она построена из 7 значков, стоящих один под другим. Также на карте нет других стен.

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (4, 3)   NORTH      3         1
ST.+-----------------------------------+
 7 | .   .   .   .   .   .   .   .   . |
   |                                   |
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | .   .   .   .   .   .   1   .   . |
   |                                   |
 4 | .   .   .   1   .   .   1   .   . |
   |                                   |
 3 | .   1   .   ^   .   .   1   .   . |
   |                                   |
 2 | .   1   1   1   .   1   1   .   . |
   |                                   |
 1 | .   1   1   1   .   1   1   1   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 7)   NORTH      3         0
ST.+-----------------------------------+
 7 | .   .   .   .   .   .   .   .   ^ |
   |                                   |
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | 1   .   .   .   .   .   .   .   . |
   |                                   |
 4 | 1   1   .   .   .   .   .   .   . |
   |                                   |
 3 | 1   1   1   .   .   .   .   .   . |
   |                                   |
 2 | 1   1   1   1   1   .   .   .   . |
   |                                   |
 1 | 1   1   1   1   1   1   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

02: Нить Ариадны

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

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Изначально Карл находится там, где оставлял последний значок, соответсвенно, рюкзачок у него пустой. Также Карл сначала смотрит в ту же сторону, куда шёл забредая (ему нужно развернуться).

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (5, 6)   NORTH      0         1
ST.+-----------------------------------+
 6 | .   .   .   .   ^   .   1   1   1 |
   |                                   |
 5 | .   1   1   .   1   .   1   .   1 |
   |                                   |
 4 | .   .   1   .   1   .   1   .   1 |
   |                                   |
 3 | .   1   1   .   1   1   1   1   1 |
   |                                   |
 2 | .   1   .   .   .   .   1   .   . |
   |                                   |
 1 | .   1   1   1   1   1   1   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

В конце Карлу следует находиться там, где он оставлял первую деталь (значок), также в рюкзачок к нему вернутся все значки, которые он оставлял в лесу и собирал на обратном пути. Направление робота должно сохраниться такое же, как будто бы он продолжал выходить из леса.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (2, 5)   WEST      28         0
ST.+-----------------------------------+
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | .   <   .   .   .   .   .   .   . |
   |                                   |
 4 | .   .   .   .   .   .   .   .   . |
   |                                   |
 3 | .   .   .   .   .   .   .   .   . |
   |                                   |
 2 | .   .   .   .   .   .   .   .   . |
   |                                   |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

03: Буря!

В один прекрасный день робот Карл решил, что наконец-то пришло время привести в порядок свой задний дворик и вычистить ряды и столбцы от мусора (значков). Но начался сильный дождь! Карл вспомнил, что у него дома окна остались незакрытыми, и побежал внутрь. На пороге дома он вдруг остановился, потому что не мог сразу придумать алгоритм, как начать закрывать окна.

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 3)   WEST      99         0
ST.+-----------------------------------+
 6 | .   .   .   .   .   .   .   .   . |
   |   +   +   +---+   +-------+       |
 5 | . | . | . | .   .   .   . | .   . |
   |   |   +---+               +---+   |
 4 | . | .   .   .   .   .   .   . | . |
   |   +                           +   |
 3 | .   .   .   .   .   .   .   .   < |
   |   +                       +---+   |
 2 | . | .   .   .   .   .   . | .   . |
   |   +---+   +-------+   +---+       |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (8, 3)   EAST      94         0
ST.+-----------------------------------+
 6 | .   .   .   .   .   .   .   .   . |
   |   +   +   +---+   +-------+       |
 5 | . | 1 | . | .   1   .   . | .   . |
   |   |   +---+               +---+   |
 4 | . | .   .   .   .   .   .   . | . |
   |   +                           +   |
 3 | .   1   .   .   .   .   .   >   . |
   |   +                       +---+   |
 2 | . | .   1   .   .   1   . | .   . |
   |   +---+   +-------+   +---+       |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

04: Пирамида

Напишите программу, с помощью которой робот Карл сможет построить в своём городе пирамиду. Пирамида будет представлять из себя треугольник Паскаля, что означает, что количество значков на каждой позиции будет ровняться сумме значков верхних правого и левого соседей. Дабы сохранить вид пирамиды и чтобы можно было точно определить верхних левого и правого соседей, будут два значка в одном ряду друг от друга отделены пустым местом. Левый нижний край пирамиды будет находиться в левом нижнем левом углу карты.

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 4)   NORTH     999         0
ST.+-------------------------------------------+
 7 | .   .   .   .   .   .   .   .   .   .   . |
   |                                           |
 6 | .   .   .   .   .   .   .   .   .   .   . |
   |                                           |
 5 | .   .   .   .   .   .   .   .   .   .   . |
   |                                           |
 4 | .   .   .   .   .   .   .   .   ^   .   . |
   |                                           |
 3 | .   .   .   .   .   .   .   .   .   .   . |
   |                                           |
 2 | .   .   .   .   .   .   .   .   .   .   . |
   |                                           |
 1 | .   .   .   .   .   .   .   .   .   .   . |
   +-------------------------------------------+
     1   2   3   4   5   6   7   8   9   10  11  AVE.
Конечная позиция

Карл находится в левом верхнем углу и смотрит на восток.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 7)   EAST      936         0
ST.+-------------------------------------------+
 7 | >   .   .   .   .   .   .   .   .   .   . |
   |                                           |
 6 | .   .   .   .   .   1   .   .   .   .   . |
   |                                           |
 5 | .   .   .   .   1   .   1   .   .   .   . |
   |                                           |
 4 | .   .   .   1   .   2   .   1   .   .   . |
   |                                           |
 3 | .   .   1   .   3   .   3   .   1   .   . |
   |                                           |
 2 | .   1   .   4   .   6   .   4   .   1   . |
   |                                           |
 1 | 1   .   5   .   10  .   10  .   5   .   1 |
   +-------------------------------------------+
     1   2   3   4   5   6   7   8   9   10  11  AVE.

05: Лестница

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл находится в левом верхнем углу, обращенный на восток.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   EAST      999         0
ST.+-----------------------------------+
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | .   .   .   .   .   .   .   .   . |
   |                                   |
 4 | .   .   .   .   .   .   .   .   . |
   |                                   |
 3 | .   .   .   .   .   .   .   .   . |
   |                                   |
 2 | .   .   .   .   .   .   .   .   . |
   |                                   |
 1 | >   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

Карл находится в правом нижнем углу, обращенный на восток.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 1)   EAST       908        0
ST.+-----------------------------------+
 6 | .   .   .   .   .   6   .   .   . |
   |                                   |
 5 | .   .   .   .   5   6   .   .   . |
   |                                   |
 4 | .   .   .   4   5   6   .   .   . |
   |                                   |
 3 | .   .   3   4   5   6   .   .   . |
   |                                   |
 2 | .   2   3   4   5   6   .   .   . |
   |                                   |
 1 | 1   2   3   4   5   6   .   .   > |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

06: Буква A

Карл получил задание научиться писать букву А, поскольку края его мира будут использованы как пиксели широкоформатного черно-белого экрана для Чемпионата мира по хоккею 2018. Пустые позиции мира представляют белый цвет, а позиции на которых количество значков равно 8 - чёрный цвет. Букву должно быть можно написать на любой экран, размеры которого минимально 5х5. Это значит, что букву нужно приспособить (уменьшить/увеличить) для разных размеров. При этом выписывать его следует через все ряды мира, сохранив один свободный столбец перед буквой с каждой из сторон.

Серединная линия буквы А всегда проходит через центр карты, то есть под этой линий будет располагаться большая половина пустых углов, а над ней - меньшая часть.

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл может находиться в любом углу карты и может быть направлен в любую сторону. В рюкзачке у него находятся целых 999 значков. Высота карты - непарное количество углов карты.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (2, 5)   EAST      999        0
ST.+-----------------------------------+
 5 | .   >   .   .   .   .   .   .   . |
   |                                   |
 4 | .   .   .   .   .   .   .   .   . |
   |                                   |
 3 | .   .   .   .   .   .   .   .   . |
   |                                   |
 2 | .   .   .   .   .   .   .   .   . |
   |                                   |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 1)   EAST      855        0
ST.+-----------------------------------+
 5 | .   .   8   8   8   8   8   .   . |
   |                                   |
 4 | .   8   .   .   .   .   .   8   . |
   |                                   |
 3 | .   8   8   8   8   8   8   8   . |
   |                                   |
 2 | .   8   .   .   .   .   .   8   . |
   |                                   |
 1 | .   8   .   .   .   .   .   8   > |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

07: Буква B

Карл получил задание научиться писать букву B, поскольку края его мира будут использованы как пиксели широкоформатного черно-белого экрана для Чемпионата мира по хоккею 2018. Пустые позиции мира представляют белый цвет, а позиции на которых количество значков равно 8 - чёрный цвет. Букву должно быть можно написать на любой экран, размеры которого минимально 6х6. Это значит, что букву нужно приспособить (уменьшить/увеличить) для разных размеров. При этом выписывать его следует через все ряды мира, сохранив один свободный столбец перед буквой с каждой из сторон.

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл может находиться в любом углу карты и может быть направлен в любую сторону. В рюкзачке у него находятся целых 999 значков. Высота карты - парное количество углов карты.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (2, 5)   EAST      999        0
ST.+-----------------------------------+
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | .   >   .   .   .   .   .   .   . |
   |                                   |
 4 | .   .   .   .   .   .   .   .   . |
   |                                   |
 3 | .   .   .   .   .   .   .   .   . |
   |                                   |
 2 | .   .   .   .   .   .   .   .   . |
   |                                   |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 1)   EAST      807        0
ST.+-----------------------------------+
 6 | .   8   8   8   8   8   8   .   . |
   |                                   |
 5 | .   8   .   .   .   .   .   8   . |
   |                                   |
 4 | .   8   8   8   8   8   8   .   . |
   |                                   |
 3 | .   8   .   .   .   .   .   8   . |
   |                                   |
 2 | .   8   .   .   .   .   .   8   . |
   |                                   |
 1 | .   8   8   8   8   8   8   .   > |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

08: Буква G

Карл получил задание научиться писать букву G, поскольку края его мира будут использованы как пиксели широкоформатного черно-белого экрана для Чемпионата мира по хоккею 2018. Пустые позиции мира представляют белый цвет, а позиции на которых количество значков равно 8 - чёрный цвет. Букву должно быть можно написать на любой экран, размеры которого минимально 6х6. Это значит, что букву нужно приспособить (уменьшить/увеличить) для разных размеров. При этом выписывать его следует через все ряды мира, сохранив один свободный столбец перед буквой с каждой из сторон.

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл может находиться в любом углу карты и может быть направлен в любую сторону. В рюкзачке у него находятся целых 999 значков. Высота карты - парное количество углов карты.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (2, 5)   EAST      999        0
ST.+-----------------------------------+
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | .   >   .   .   .   .   .   .   . |
   |                                   |
 4 | .   .   .   .   .   .   .   .   . |
   |                                   |
 3 | .   .   .   .   .   .   .   .   . |
   |                                   |
 2 | .   .   .   .   .   .   .   .   . |
   |                                   |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 1)   EAST      831        0
ST.+-----------------------------------+
 6 | .   .   8   8   8   8   8   .   . |
   |                                   |
 5 | .   8   .   .   .   .   .   8   . |
   |                                   |
 4 | .   8   .   .   .   .   .   .   . |
   |                                   |
 3 | .   8   .   8   8   8   8   8   . |
   |                                   |
 2 | .   8   .   .   .   .   .   8   . |
   |                                   |
 1 | .   .   8   8   8   8   8   .   > |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

09: Склад

Карл устроился на подработку на склад. Сначала ему дали довольно легкое задание - ему нужно проверить, какие из старых складских помещений всё еще можно использовать по назначению. Склад сам по себе большой и имеет много старых помещений внутри. Безопасным помещением считается такое помещение, в котором только один вход и всё оно ограничено крепкой стеной. Если в помещении находятся другие потенциальные выходы, нужно такое помещение обозначить как подлежащее к ремонту, поскольку безопасным его считать нельзя. Напишите программу, с помощью которой робот Карл проведёт инспекцию доступных помещений склада.

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   EAST      99         0
ST.+-----------------------------------+
 5 | .   .   . | .   .   . | . | .   . |
   |       |   +---+   +---+   |   |   |
 4 | .   . | .   . | . | .   . | . | . |
   |   +---+       |   |       |   |   |
 3 | . | .   .   . | . | .   . | .   . |
   |   |           |   |       |   |   |
 2 | . | . | . | . | . | . | . | . | . |
   |   +---+   +---+   +---+   |   |   |
 1 | >   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

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

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 1)   EAST      95         0
ST.+-----------------------------------+
 5 | .   .   . | .   .   . | . | .   . |
   |       |   +---+   +---+   |   |   |
 4 | .   . | .   . | . | .   . | . | . |
   |   +---+       |   |       |   |   |
 3 | . | .   .   . | . | .   . | .   . |
   |   |           |   |       |   |   |
 2 | 1 | . | 1 | . | . | . | . | 1 | 1 |
   |   +---+   +---+   +---+   |   |   |
 1 | .   .   .   .   .   .   .   .   > |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

10: Библиотека

Робот Карл находится в библиотеке, которая состоит хотя из одной книжной стойки (согласно размеров мира). У каждой стойки одинаковая ширина - 2 позиции, также каждая стойка находится расположена на равном расстоянии на восток - одна пустая позиция (см. начальную и конечную позицию). У каждой стойки одинаковая высота, которая зависит от размеров карты - по одной пустой позиции с севера и юга мира. Количество полок на каждой из стоек отнюдь разный. Книги на полках стоек представлены значками.

Задача робота заключается в том, что ему нужно отсортировать книги (значки) на каждой из стоек с севера на юг.

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл находится сначала в юго-западном углу.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   EAST      30         0
ST.+-----------------------------------+
 8 | .   .   .   .   .   .   .   .   . |
   |---+----   +---+----   +---+----   |
 7 | . | 1   . | . | 1   . | . | 1   . |
   |---+----   +---+----   +---+       |
 6 | . | 1   . | . | 1   . | . | .   . |
   |---+----   +---+----   +---+       |
 5 | . | 1   . | . | .   . | . | .   . |
   |---+       +---+----   +---+       |
 4 | . | 1   . | . | 1   . | . | .   . |
   |---+----   +---+----   +---+       |
 3 | . | 1   . | . | 1   . | . | .   . |
   |---+----   +---+----   +---+       |
 2 | . | 1   . | . | 1   . | . | 1   . |
   |---+----   +---+----   +---+----   |
 1 | >   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

Свою задачу робот завершает, находясь в юго-восточном углу

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 1)   EAST      30         0
ST.+-----------------------------------+
 8 | .   .   .   .   .   .   .   .   . |
   |---+----   +---+----   +---+----   |
 7 | . | 1   . | . | 1   . | . | 1   . |
   |---+----   +---+----   +---+       |
 6 | . | 1   . | . | 1   . | . | 1   . |
   |---+----   +---+----   +---+       |
 5 | . | 1   . | . | 1   . | . | .   . |
   |---+       +---+----   +---+       |
 4 | . | 1   . | . | 1   . | . | .   . |
   |---+----   +---+----   +---+       |
 3 | . | 1   . | . | 1   . | . | .   . |
   |---+----   +---+----   +---+       |
 2 | . | 1   . | . | .   . | . | .   . |
   |---+----   +---+----   +---+----   |
 1 | .   .   .   .   .   .   .   .   > |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

11: Сортирование 2

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Изначально Карл находится на случайном месте карты и не имеет у себя в рюкзачке значков.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (4, 3)   NORTH      0         1
ST.+-----------------------------------+
 7 | .   .   .   .   .   .   .   .   . |
   |                                   |
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | .   .   .   .   .   .   1   .   . |
   |                                   |
 4 | .   .   .   1   .   .   1   .   . |
   |                                   |
 3 | .   1   .   ^   .   .   1   .   . |
   |                                   |
 2 | .   1   1   1   .   1   1   .   . |
   |                                   |
 1 | .   1   1   1   .   1   1   1   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

Карл в конце находится в правом нижнем углу карты, обращенный на восток. Все столбцы уже отсортированы от самого низкого по самый высокий. Таким образом, самый высокий столбец - на крайнем западе.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (9, 1)   EAST       0         0
ST.+-----------------------------------+
 7 | .   .   .   .   .   .   .   .   . |
   |                                   |
 6 | .   .   .   .   .   .   .   .   . |
   |                                   |
 5 | .   .   .   .   .   .   1   .   . |
   |                                   |
 4 | .   .   .   .   .   1   1   .   . |
   |                                   |
 3 | .   .   .   .   1   1   1   .   . |
   |                                   |
 2 | .   .   1   1   1   1   1   .   . |
   |                                   |
 1 | .   1   1   1   1   1   1   .   > |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

12: Уборка в гардеробе

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Изначально робот Карл находится в начале ряда, на котором висят значки. В рюкзаке у него значков нет.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 6)   EAST       0         0
ST.+-----------------------------------+
 7 | .   .   .   .   .   .   .   .   . |
   |   +-------+   +-----------+   +---|
 6 | >   .   1   .   1   1   1   .   1 |
   |                                   |
 5 | .   .   1   .   1   1   1   .   1 |
   |                                   |
 4 | .   .   1   .   .   .   1   .   1 |
   |                                   |
 3 | .   .   1   .   .   .   1   .   . |
   |                                   |
 2 | .   .   .   .   .   .   1   .   . |
   |                                   |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

После уборки робот вернётся на изначальную позицию..

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 6)   EAST       0         0
ST.+-----------------------------------+
 7 | .   .   .   .   .   .   .   .   . |
   |   +-------+   +-----------+   +---+
 6 | >   .   1   .   1   1   1   .   1 |
   |                                   |
 5 | .   .   1   .   1   1   1   .   1 |
   |                                   |
 4 | .   .   .   .   .   1   1   .   1 |
   |                                   |
 3 | .   .   .   .   .   .   1   .   1 |
   |                                   |
 2 | .   .   .   .   .   .   .   .   1 |
   |                                   |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

13: Плохой пёс

Карл купил себе пса. Когда он вернулся домой, он не только поразбрасывал обувь, но и часть покусал. Испорченная обувь помечена количеством значков большим, чем 1 (основываясь на количестве раскушенных частей). Обувь считается целой, если она представлена ровно одним значком. У Карла есть специально отведённое место для обуви - северная стена. Обувь разложена по парам с правого верхнего угла так, что между каждой парой всегда только одна пустая позиция. Задача Карла в данной ситуации - поскладывать обувь на её место, но только такую обувь, которая смогла отделаться от собачки. Испорченную обувь роботу следует сложить в сумку для того, чтобы потом отнести в ремонт.

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл может начинать уборку со случайной позиции.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (4, 2)   EAST       0         0
ST.+-----------------------------------+
 6 | .   .   .   .   1   .   .   .   1 |
   |                                   |
 5 | .   1   .   .   .   .   .   .   . |
   |                                   |
 4 | .   .   2   .   .   1   .   1   . |
   |                                   |
 3 | .   .   1   .   .   .   .   .   . |
   |                                   |
 2 | .   1   .   >   .   1   .   .   . |
   |                                   |
 1 | .   .   .   .   .   .   .   .   1 |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.
Конечная позиция

Все пары обуви разложены при северной стене. Если разместить в один ряд всю обувь не удалось, робот решает её переносить на следующий ряд снизу. При этом формировать пару должна соответствующая обувь. Карл находится в начале ПОСЛЕДНЕГО ряда с обувью и смотрит, насколько хорошо у него получилось разложить обувь. Например, если последний ряд начинается на позиции 8, тогда робот должен остановиться на позиции 7.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (7, 5)   EAST       3         0
ST.+-----------------------------------+
 6 | .   1   1   .   1   1   .   1   1 |
   |                                   |
 5 | .   .   .   .   .   .   >   1   1 |
   |                                   |
 4 | .   .   .   .   .   .   .   .   . |
   |                                   |
 3 | .   .   .   .   .   .   .   .   . |
   |                                   |
 2 | .   .   .   .   .   .   .   .   . |
   |                                   |
 1 | .   .   .   .   .   .   .   .   . |
   +-----------------------------------+
     1   2   3   4   5   6   7   8   9   AVE.

14: Ремонт замка Чудесная Горка

Карла наняли для того, чтобы он помог отремонтировать ущерб, нанесённый замку Чудесная Горка. В данном случае, роботу следует исправить набор каменных колонн (конечно же представленных значками), в которых не хватает камней. После ремонтных работ должны все дыры быть заполнены значками. Колонны сами по себе разновысокие и находятся друг от друга на случайном расстоянии.

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл начинает работу в юго-западном углу карты, обращенный на восток.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   EAST      99         1
ST.+-------------------------------------------+
 8 | .   .   .   .   .   .   .   .   .   .   . |
   |       +---+                       +---+   |
 7 | .   . | . | .   .   .   .   .   . | . | . |
   |   +---+   +---+   +-------+   +---+   +---|
 6 | . | .   .   . | . | .   . | . | .   .   1 |
   |---+           +---+       +---+           |
 5 | 1   .   .   .   .   .   .   1   .   .   1 |
   |                                           |
 4 | .   .   .   .   1   .   .   .   .   .   . |
   |                                           |
 3 | .   .   .   .   .   .   .   1   .   .   1 |
   |                                           |
 2 | .   .   .   .   1   .   .   .   .   .   . |
   |                                           |
 1 | >   .   .   .   1   .   .   .   .   .   1 |
   +-------------------------------------------+
     1   2   3   4   5   6   7   8   9   10  11  AVE.
Конечная позиция

Карл сдаёт работу, находясь юго-восточном углу, также смотря на восток.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (11, 1)  EAST      88         1
ST.+-------------------------------------------+
 8 | .   .   .   .   .   .   .   .   .   .   . |
   |       +---+                       +---+   |
 7 | .   . | . | .   .   .   .   .   . | . | . |
   |   +---+   +---+   +-------+   +---+   +---|
 6 | . | .   .   . | . | .   . | . | .   .   1 |
   |---+           +---+       +---+           |
 5 | 1   .   .   .   1   .   .   1   .   .   1 |
   |                                           |
 4 | 1   .   .   .   1   .   .   1   .   .   1 |
   |                                           |
 3 | 1   .   .   .   1   .   .   1   .   .   1 |
   |                                           |
 2 | 1   .   .   .   1   .   .   1   .   .   1 |
   |                                           |
 1 | 1   .   .   .   1   .   .   1   .   .   > |
   +-------------------------------------------+
     1   2   3   4   5   6   7   8   9   10  11  AVE.

15: Новогодняя ёлочка

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

Также не забывайте, что по-прежнему нельзя использовать переменные.

Начальная позиция

Карл начинает наряжать ёлку в юго-западном углу, обращенный на восток. К счастью, у него игрушек достоточно!

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (1, 1)   EAST      99         0
ST.+-----------------------------------------------+
 7 | .   .   .   .   .   .   .   .   .   .   .   . |
   |                                               |
 6 | .   .   .   .   .   .   .   .   .   .   .   . |
   |                   |   |                       |
 5 | .   .   .   .   . | . | .   .   .   .   .   . |
   |               ----+   +----                   |
 4 | .   .   .   .   . | . | .   .   .   .   .   . |
   |           --------+   +--------               |
 3 | .   .   .   .   . | . | .   .   .   .   .   . |
   |       ------------+   +------------           |
 2 | .   .   .   .   . | . | .   .   .   .   .   . |
   |   ----------------+   +----------------       |
 1 | >   .   .   .   . | . | .   .   .   .   .   . |
   +-----------------------------------------------+
     1   2   3   4   5   6   7   8   9   10  11  12  AVE.
Конечная позиция

Робот заканчивает своё занятие в юго-восточном углу, смотря на восток.

 CORNER  FACING  BEEP-BAG  BEEP-CORNER
 (12, 1)  EAST      89         0
ST.+-----------------------------------------------+
 7 | .   .   .   .   .   .   .   .   .   .   .   . |
   |                                               |
 6 | .   .   .   .   .   2   .   .   .   .   .   . |
   |                   |   |                       |
 5 | .   .   .   .   1 | . | 1   .   .   .   .   . |
   |               ----+   +----                   |
 4 | .   .   .   1   . | . | .   1   .   .   .   . |
   |           --------+   +--------               |
 3 | .   .   1   .   . | . | .   .   1   .   .   . |
   |       ------------+   +------------           |
 2 | .   1   .   .   . | . | .   .   .   1   .   . |
   |   ----------------+   +----------------       |
 1 | .   .   .   .   . | . | .   .   .   .   .   > |
   +-----------------------------------------------+
     1   2   3   4   5   6   7   8   9   10  11  12  AVE.

Additional Resources

  1. Karl Language Reference
  2. Version Control (RU)
  3. Here you can find the original library of Karel the Robot, including the library installation instructions