В работе любого разработчика важную роль играет нестандартное мышление. Не хотите проверить себя? Инженеры уже приготовили для вас необычную и очень любопытную задачу!
Условие задачи
Нам дан сложный механизм. Внутри него есть вращающийся в разные стороны диск. Работникам, которые используют этот механизм, нужно понимать, в какую именно сторону вращается диск, но визуально определить это они не могут, так как заглянуть внутрь прибора нет возможности. Все, что разрешают сделать проектировщики – это установить датчик и раскрасить диск красками двух цветов: черной и белой.
Условия:
- Можно использовать любое количество краски – это не помешает работе диска.
- Смешивать черную и белую краски, чтобы получить серую, нельзя.
- Датчик срабатывает только на окрашенные участки диска.
- Измерить скорость вращения или узнать время показа любой из красок нельзя.
- Датчик способен увидеть только последовательность цветов Б и Ч, к примеру, БЧБЧ.
- Датчик мгновенно реагирует на изменения цвета и его появление независимо от скорости вращения.
Поиск решения
Сначала хочется разделить диск на четыре сектора и поочередно закрасить их в Б и Ч. Однако это не поможет определить направление вращения, так как последовательность будет одинаковая: ЧБЧБЧБЧБЧБ…
Альтернативный подход
Можно использовать почти полностью белый диск, оставив три черных сектора, чтобы два из них были расположены рядом, а третий был отдален. Идея состоит в том, что при вращении можно будет определять направление диска по тому, какой черный сектор попадет под датчик первым: двойной или одиночный.
Однако и это не сработает, так как последовательность останется одинаковой в обоих направлениях (ЧБЧБЧБЧБЧБ…).
Изобретательное решение
Из условий мы знаем, что датчик реагирует только на окрашенные участки диска. Следовательно, можно получать информацию не только про изменение цвета, но и про появление и исчезновение краски. Новый сигнал будет в двух случаях:
- Был белый, стал черный (и наоборот).
- Было пусто – никакой краски, появился любой из цветов.
Получается, что у нас есть возможность повторять один и тот же цвет несколько раз подряд, разделяя его «отсутствием» цвета. Датчик не будет реагировать на отсутствие краски, а следующее появление цвета зафиксирует как новое.
Таким образом, мы можем придумать последовательность белого и черного, которая в разные стороны будет читаться по-разному. Простейший вариант: ЧЧБЧББ.
Если измерять более долго, получим ЧЧБЧББЧЧБЧББЧЧБЧББ… В обратную сторону: ББЧБЧЧ. Результат долгого измерения: ББЧБЧЧББЧБЧЧББЧБЧЧ…
Сколько бы раз мы ни повторяли эту последовательность, первая в ней не проявится. Программист должен зафиксировать минимум 12 символов и отправить их в массив, в котором потом нужно искать одну из этих двух последовательностей.
Задача на логику с вращающимся диском помогает развивать нестандартное мышление у программистов. Используя простые принципы последовательности и отсутствие краски, можно легко определить направление вращения диска при помощи датчика. Это упражнение демонстрирует важность креативного подхода к решению задач в программировании, позволяя взглянуть на проблему с разных сторон и найти оригинальное решение.