Сегодня будет что-то очень странное. Короткая, но интересная заметка, непонятное условие, школьные интриги, репетиторское расследование, расчехление экстрасенсорных навыков при попытках угадать «Что хочет препод?». Я уже не так давно разбирал задачу 15.1 из ОГЭ по информатике. Там была лестница, с которой у многих ребят возникали трудности:
Но сегодня будет ещё более странная задача, полученная на пробниках в школе.
А пока попрошу подписаться на мой канал в telegram IT mentor . Краткие заметки и наблюдения по физике, математике, программированию, железу и технике 💡
🕑 Задача
Условие задачи уже всем знакомо. Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Между соседними (по сторонам) клетками может стоять стена, через которую Робот пройти не может. У Робота есть девять команд... Короче:
Напишите для Робота алгоритм, закрашивающий все клетки, расположенные в узком коридоре (прямоугольнике). Робот должен вернуться в исходную позицию. Длина коридора не задана. Ширина - одна клетка.
Такое условие было изначально...
Моя ученица рассуждала очевидным для всех образом:
1. Пройти влево, пока не встретим стену, попутно закрашивая все клеточки.
2. Запустить второй цикл, чтобы пройти в начальное положение, уже не закрашивая клетки.
Вроде всё логично и разумно. Но что вы думаете? Задание НЕ ЗАСЧИТАЛИ. Учитель информатики сказал (со слов ученицы) следующее: «Задание выполнено неправильно, цикл должен быть один. Робот должен ориентироваться на количество шагов, разворачиваться, когда пройдена длина коридора...»
Честно говоря, мы с ученицей так и не поняли, что хотел преподаватель со школы. И вот почему:
1. Длина коридора не задана, как ориентироваться на неё для разворота обратно?
2. Почему нужно решать одним циклом, когда в ОГЭ нас не ограничивают количеством циклов?
3. Почему такую же задачу, решенную двумя циклами, засчитали другой однокласснице?
Много вопросов и мало ответов.
Как вообще можно решить такую задачу из ОГЭ ?
Никаких подвохов, делаем два цикла, у нас всё работает:
Напомню, что преподаватель не засчитал такое решение.
Что если сделать привязку к длине коридора?
Следующий тип решений тоже я никогда не встречал в ОГЭ, но используя синтаксис Кумир, можно написать код, который будет возвращаться в исходную точку после прохождения половины пути. Вопрос в том, как узнать длину пути... Т.е. число 12 я написал сразу, потому что посчитал количество шагов ПОЛНОГО пути туда и обратно. Как его найти алгоритмически, не зная длину коридора? При этом используя ОДИН цикл? Непонятно... 😏
Идеально решение существует?
Решение, которое считает шаги, сделанные роботом, а также использует только один цикл обхода. Единственное, что я придумал, чтобы исправить замечания школьного препода, это такой алгоритм решения, который работает для любой длины коридора, считает шаги, использует только один цикл. Но я не знаю, этого ли хотят от ученицы... Здесь используется привязка к флагу (булевой переменной) walleft. Данная переменная принимает 3 возможных значения.
◼ walleft = 0 — мы находимся в начале пути, означает, что нам нужно закрашивать и идти влево.
◼ walleft = 1 — мы дошли до стены слева. Требуется перестать красить, развернуться и идти вправо.
◼ walleft = 2 — мы дошли до стены справа (исходное положение), требуется остановиться. Цикл подвязан именно к этой переменной.
Все листинги кода работают, но вопрос остается прежним: Почему преподаватель информатики не засчитывает простое решение, состоящее из 2 циклов? Ваши мысли напишите в комментариях. 😊
Понравилась статья? Поставьте лайк, подпишитесь на канал, напишите комментарий! Вам не сложно, а мне очень приятно :)
Если Вам нужен репетитор по физике, математике или информатике/программированию, Вы можете написать мне или в мою группу Репетитор IT mentor в VK
Лучший канал для физиков, математиков и программистов
Репетитор IT mentor в telegram