Если сможете решить эту задачу, поняв диалог двух программистов, то вы либо работаете в крупной IT-компании, либо должны задуматься о том, чтобы прийти туда и удивить всех.
Однажды встретились два программиста, которые не общались много лет. Один спросил другого:
- Говорят, у тебя есть дети?
- Да, трое сыновей.
- И сколько им лет?
- В общей сложности — 13.
- Что еще ты можешь о них сказать?
- Если перемножить числа, обозначающие их возрасты, то получится число, равное количеству окон вон в том доме.
Посчитав окна в доме, первый сказал:
- Отлично, но этого недостаточно для ответа.
- Могу добавить, что старший сын рыжеволосый.
- А, ну теперь все понятно, значит, твоим сыновьям (и назвал возраст каждого из троих детей).
Сколько лет было детям? И самое главное, как первый смог выяснить их возраст из этого, казалось бы, нелогичного диалога?
Подавляющее большинство людей в мире считают эту задачу неразрешимой. Она сводит с ума, взрывает мозг и заставляет поверить в божественную природу программистов. Но это только на первый взгляд. Все становится решаемым, если включить логику на максимум.
Возьмите лист бумаги, запишите все, что знаете, и попробуйте разобраться, что к чему, хотя постановка задачи и напоминает диалог Безумного Шляпника и Чеширского Кота из «Алисы в Стране Чудес».
Решение
Каждый вопрос-ответ — подсказка, шаг к решению задачи. Из первых строк мы узнаем, что сыновей всего 3. Из второй реплики отвечающего становится ясно, что сумма чисел их возрастов равна 13. Теперь можно набросать список возможных комбинаций. Их не так много, как кажется на первый взгляд, — всего 14. Остальные получаются из них путем перестановки чисел возрастов.
Третий ответ кажется странным и бесполезным. Возможно, он дал какую-то информацию первому программисту, и тот смог сосчитать окна в указанном доме. Но для нас такой ответ не имеет никакого значения, потому что мы не видели дом и нам не сказали, сколько в нем окон. Но это только на первый взгляд.
Тут есть намек. Если бы этой информации было достаточно для первого программиста, он бы сразу назвал возраст мальчиков, потому что найти 14 значений несложно. Однако он не смог сразу назвать ответ и попросил еще одну подсказку. И вот почему.
Перечислим все варианты произведения возрастов мальчиков. Первый программист, вероятно, сделал то же самое.
Кроме того, он знал количество окон в доме. Однако он не смог вычислить возраст детей, что указывает на некую неопределенность.
Два варианта произведения чисел возрастов дают один и то же результат, таким образом, очевидно, что в доме, на который указал второй программист, было 36 окон (вот мы и узнали то, о чем нам не сказали).
Но как нам может помочь четвертая подсказка о том, что старший сын — рыжий? Какое отношение цвет волос имеет к возрасту?
Конечно, никакого. Мы можем предположить, что кто-то в семье был ирландцем, но это вряд ли поможет. Дело не в цвете волос, а в словах «старший сын». Это означает, что есть один сын, который старше двух других, поэтому вариант 1, 6, 6 можно отбросить, так как в нем два старших сына.
Конечно, можно придраться и сказать, что двух старших не бывает, и даже среди близнецов и тройняшек один старше, а другой младше. Но в этом случае обычно говорят иначе, например, что они ровесники, ведь для незнакомого человека важно количество полных лет, а не разница в несколько минут.
Если кто не понял, старшему 9 лет, а двум младшим — по 2 года.
Читайте также:
- А вы сможете ответить на этот знаменитый вопрос из собеседования?
- Пересечение 3D-лучей (ближайшая точка)
- Утечка мозгов в 3 часа дня: почему разработчики не могут продуктивно думать после обеда?
Читайте нас в Telegram, VK и Дзен
Перевод статьи Josef Cruz: You’re a Good Programmer if You Can Solve This Problem





