Задача о ленивом электрике
Логическая задача для программистов на поиск оптимального решения для маркирвки кабеля, который находится под землёй. Рассмотрены два варианта решения.
43К открытий43К показов
Между двумя телефонными станциями, расположенными на расстоянии 10 километров друг от друга, был проложен подземный 120-жильный кабель. После прокладки кабеля обнаружилось, что жилы визуально не отличаются.
Представьте, что вы — электрик-стажёр. Начальство попросило вас определить и пометить провода на обоих концах. У вас есть лампочка и аккумулятор. Транспорт стажёрам не полагается, своего у вас тоже нет, зато есть изолента и ручка для маркировки проводов.
Как решить поставленную задачу, пройдя наименьший путь?
Решение
На одном конце возьмите жилу и поставьте на ней отметку «A». Затем соедините любые другие две жилы и подпишите каждую из них буквой «B», после этого соедините три ещё не соединенных жилы, отметьте каждую из них буквой «C». Продолжайте в том же духе, пока все жилы не будут объединены в группы по 1, 2, 3, 4, 5 и более.
Примечание Всего получится 15 групп с обозначениями от А до О, и в самой большой группе будет 15 жил.
Теперь подойдите к другому концу кабеля и подключите батарею к любой жиле. Теперь подставляйте лампочку к другим жилам, помечайте жилы, на которых лампочка загорится, таким образом: если лампочка не загорелась, значит жила не подсоединена к другим, и это — жила А; если лампочка загорелась один раз, значит это жила В (группа из 2х жил) и т.д. Таким образом у вас получились те же обозначения групп, что и на другом конце. Теперь возьмите из каждой группы по одной жиле, соедините их и пронумеруйте так, чтобы первой была буква группы, а после неё – размер группы. Первая группа у вас будет самой большой (15 жил), а номера будут выглядеть как А15, В15, …, О15. Последняя группа будет самой маленькой (т.к. останется только одна жила) и жила в ней будет под номером О1.
Теперь вернитесь на исходную позицию (ту сторону кабеля, с которой начинали) и отсоедините старые связки. Тем же методом, что и на противоположной стороне (с помощью лампочки), определите размеры групп и проставьте полученное число рядом с уже стоящей буквенной маркировкой. Теперь маркировка совпадает на обеих концах провода.
Ответ
Общее наименьшее расстояние, пройденное электриком, составляет 20 километров.
Альтернативное решение
Сначала свяжите попарно 120 жил. У вас получится 60 пар. Затем подойдите к другому концу кабеля, пометьте любую жилу цифрой «1» и подключите её батарее. Определите с помощью лампочки, с какой жилой соединена жила номер 1 на другом конце (поскольку они соединены на другом конце, лампочка загорится). Пометьте эту жилу цифрой «2». Затем возьмите другую жилу, (не «1» и не «2»), поставьте на ней отметку «3» и подсоедините к жиле «2». Теперь у вас последовательно соединены жилы 1-2-3-4: 1 и 2 соединены на противоположном конце кабеля, 2 и 3 – на этом, 3 и 4 – на противоположном. Найдя жилу, на которой загорится лампочка, присвойте ей номер «4». Продолжайте тем же образом, пока не пронумеруете все 120 жил.
Вернитесь на ту сторону кабеля, где начали работу, оставив батарею, присоединённую к жиле «1». На исходной стороне пометьте каждую жилу так, чтобы вы знали, с какой другой она была соединена. Например, 1А – 1В, 2А – 2В, … 60А – 60В. Теперь отсоедините все жилы (на исходной позиции, с которой начали работу), лампочкой проверьте какая из них подключена к батарее и присвойте ей номер «1». В зависимости от того, какая жила была в паре с помеченной «1», пометьте её цифрой «2». Например, если у жилы, которая под напряжением, была пометка 3В, то жиле с пометкой 3А нужно присвоить номер «2». Теперь вы можете отыскать жилу 3, так как она подключена к «2» на другом конце кабеля. Как только найдёте жилу «3», пометьте цифрой «4» ту жилу, которая была с ней в паре (согласно нумерации 1А-1В, 2А-2В, …) и так далее.
Ответ
В итоге наименьшее расстояние, которое вам нужно пройти для выполнения задачи, составляет 20 километров.
Примечание Данное решение предполагает, что у кабеля слабое сопротивление, которое позволит загореться лампочке через шнур длиной в 1200 километров.
Другие интересные задачи для программистов (и не только) вы можете посмотреть у нас на сайте.
43К открытий43К показов