Вращающийся диск: задачка на логику для программистов

В работе любого разработчика важную роль играет нестандартное мышление. Не хотите проверить себя? Инженеры уже приготовили для вас необычную и очень любопытную задачу!

Условие задачи

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

Условия:

  • Можно использовать любое количество краски – это не помешает работе диска.
  • Смешивать черную и белую краски, чтобы получить серую, нельзя.
  • Датчик срабатывает только на окрашенные участки диска.
  • Измерить скорость вращения или узнать время показа любой из красок нельзя.
  • Датчик способен увидеть только последовательность цветов Б и Ч, к примеру, БЧБЧ.
  • Датчик мгновенно реагирует на изменения цвета и его появление независимо от скорости вращения.

Поиск решения

Сначала хочется разделить диск на четыре сектора и поочередно закрасить их в Б и Ч. Однако это не поможет определить направление вращения, так как последовательность будет одинаковая: ЧБЧБЧБЧБЧБ…

Альтернативный подход

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

Однако и это не сработает, так как последовательность останется одинаковой в обоих направлениях (ЧБЧБЧБЧБЧБ…).

Изобретательное решение

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

  • Был белый, стал черный (и наоборот).
  • Было пусто – никакой краски, появился любой из цветов.

Получается, что у нас есть возможность повторять один и тот же цвет несколько раз подряд, разделяя его «отсутствием» цвета. Датчик не будет реагировать на отсутствие краски, а следующее появление цвета зафиксирует как новое.

Таким образом, мы можем придумать последовательность белого и черного, которая в разные стороны будет читаться по-разному. Простейший вариант: ЧЧБЧББ.

Если измерять более долго, получим ЧЧБЧББЧЧБЧББЧЧБЧББ… В обратную сторону: ББЧБЧЧ. Результат долгого измерения: ББЧБЧЧББЧБЧЧББЧБЧЧ…

Сколько бы раз мы ни повторяли эту последовательность, первая в ней не проявится. Программист должен зафиксировать минимум 12 символов и отправить их в массив, в котором потом нужно искать одну из этих двух последовательностей.

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