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