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

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

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


Условия, которые нужно соблюсти:

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


Вопрос: Как нужно покрасить диск черной и белой краской, чтобы по последовательности чередования цветов можно было узнать направление вращения?


Решение

Сразу хочется разделить диск на четыре сектора и поочередно закрасить их в Б и Ч:

Но это не поможет нам определить направление вращения, потому что в любом случае последовательность будет одинаковая:

ЧБЧБЧБЧБЧБ…


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

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


И влево, и вправо будет то же самое ЧБЧБЧБЧБЧБ…


Кажется, пора подключить изобретательность!


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

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


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


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


Простейший вариант, соответствующий этим условиям, выглядит так: ЧЧБЧББ.

Если измерять более долго, получим ЧЧБЧББЧЧБЧББЧЧБЧББ...


В обратную сторону эта последовательность будет читаться иначе, а именно: ББЧБЧЧ.

Результат долгого измерения: ББЧБЧЧББЧБЧЧББЧБЧЧ…


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

Значит, программист должен зафиксировать по крайней мере 12 символов и отправить их в массив, в котором потом нужно искать одну из этих двух последовательностей.


Вот как это будет выглядеть на диске:


()
Количество показов: 82
21 декабря 2020

Возврат к списку

Корзина0 позиций на сумму 0 руб.