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