Инженерная задачка для программистов

Как запрограммировать датчик для вращающегося диска?

Инженерная задачка для программистов

Очередная задача на нестандартное мышление и логику. 

Внутри одного сложного механизма вращается диск — в одну или другую сторону. 

Для работы механизма важно понимать, в какую сторону крутится диск, но заглянуть внутрь при работе мы не можем. Максимум, что нам разрешают сделать инженеры, — поставить датчик и нанести на диск чёрную и белую краску.

Условия:

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

👉 Как нам покрасить диск, чтобы в любой момент по последовательности чёрных и белых цветов мы могли определить направление вращения? 

Первая мысль — поделить диск на сектора и по очереди их закрасить в чёрные и белые цвета:

Задача на логику для программистов

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

ЧБЧБЧБЧБЧБЧБЧБЧБЧБЧ…

Попробуем подойти с другой стороны: пусть весь диск будет белым, а на нём будут три чёрных сектора — сначала один, а чуть подальше — два других, близко друг к другу. По идее так мы сможем понять при вращении, какой сектор идёт первым — одинарный или двойной:

Задача на логику для программистов

Увы, это не работает: как бы диск ни вращался, всё равно мы получим один и тот же результат, потому что датчик не учитывает время прохождения, а реагирует только на цвет. 

ЧБЧБЧБЧБЧБЧБЧБЧБЧБЧБ…

❗️ А теперь подключаем изобретательность

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

 

  • Был один цвет, начался другой.
  • Не было никакого цвета, появился какой-то цвет.

Это значит, что у нас есть новый способ измерять вращение диска — через «отсутствие цвета» и повтор одного и того же цвета. Если не закрашивать часть диска, то датчик такие части измерять не будет, а заново среагирует на новое появление чёрного или белого цвета.

Получается, что наша задача — придумать такую последовательность из Ч и Б, которая в разные стороны читается по-разному.

Самая простая последовательность, которая подходит под эти условия — ЧЧБЧББ. При долгом измерении получим такое:

ЧЧБЧББЧЧБЧББЧЧБЧББ

А при вращении в обратную сторону последовательность превратится в ББЧБЧЧ и при долгом измерении станет такой:

ББЧБЧЧББЧБЧЧББЧБЧЧ

Даже если её повторить много раз, мы не найдём в ней первую последовательность ЧЧБЧББ. Значит, задача программиста — замерить хотя бы 12 символов, поместить их в массив и найти в нём одну или вторую базовую последовательность. 

Осталось нарисовать это на диске:

Задача на логику для программистов

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
А вы читали это?
9 простых задач на математику
9 простых задач на математику

Всё настолько просто, что половину можно решить в уме.

easy
Андрюха, у нас логика! Возможно, криминал
Андрюха, у нас логика! Возможно, криминал

Логическая задача о преступности.

easy
Задача про находчивого альпиниста
Задача про находчивого альпиниста

Как спастись от укуса змеи, если все противоядия — одинаковые.

easy
Задача про необязательного программиста
Задача про необязательного программиста

Как потратить всё, что заработал.

easy
Простая задача, которую сходу не смог решить Эйнштейн
Простая задача, которую сходу не смог решить Эйнштейн

Мы тоже не смогли, теперь ваша очередь.

hard
Шок-задача про длинный мост
Шок-задача про длинный мост

Ответ убил

easy
Какой сегодня день недели? Когда выходной?
Какой сегодня день недели? Когда выходной?

А? Что? Как? Задача какая-то

easy
Задача про спикеров: в каком порядке выступать, чтобы оно прошло успешно?
Задача про спикеров: в каком порядке выступать, чтобы оно прошло успешно?

Считаем вероятности и добавляем других спикеров

easy
Лучшие задачи, где потребуется нестандартное мышление
Лучшие задачи, где потребуется нестандартное мышление

Мыслить нестандартно — полезно

easy
medium