Задача про демонов с собеседования на аналитика
hard

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

Что делать демонам в сложной ситуации

Вот вам демонически сложная задача на логику. Условия:

  • В деревне растёт одно яблоко и живёт 65 демонов. 
  • Если демон съест яблоко, он сразу уснёт.
  • Если демон съест другого спящего демона, он тоже сразу уснёт.
  • Демоны очень голодны и едят что угодно при первой удобной возможности.
  • Демоны очень умны и всегда рассчитывают свои действия на много ходов вперёд.
  • Наивысший приоритет для демона — собственная безопасность, поэтому, если ему будет грозить опасность, он никого не съест.
  • Демон съест что угодно, только если после этого его жизни ничего не будет угрожать.

Что вот-вот произойдёт в этой деревне?

На первый взгляд кажется, что с яблоком ничего не случится — как только любой демон его съест, его самого тут же съедят другие, поэтому демоны не будут трогать яблоко из-за опасения стать следующим. Теперь разберёмся, что будет на самом деле.

Для решения используем принцип математической индукции. Это значит, что мы начнём с маленьких цифр, будем постепенно их увеличивать и посмотрим, сможем ли мы найти при этом какую-то закономерность.

1 демон

Если в деревне будет только один демон, то всё просто: демон съедает яблоко и засыпает сам, но он в безопасности, потому что больше никого нет. 

1 демон — яблоко съедено, больше ничего не происходит

2 демона

Если в деревне будет два демона, то яблоко останется целым — оба демона будут опасаться за свою безопасность. Дело в том, что стоит кому-то из них съесть яблоко, то ситуация становится одинаковой с предыдущей, только вместо яблока — спящий демон, а значит, и поведение будет таким же.

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

2 демона — яблоко целое, больше ничего не происходит.

3 демона

Если в деревне будет 3 демона, то случится такое:

  1. Первый демон съест яблоко и уснёт.
  2. Ситуация превратится в предыдущую, только вместо яблока — спящий демон.

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

3 демона — яблоко съедено, больше ничего не происходит.

4 демона

Если в деревне будет 4 демона, то вот один из вариантов:

  1. Первый демон съедает яблоко, и ситуация превращается в предыдущую, только вместо яблока — демон.
  2. Это значит, что этого спящего демона может съесть второй демон и спокойно уснуть, не опасаясь за свою жизнь — оставшиеся два других его есть не будут, зная, что их тоже съедят.

Получается, что всем демонам логично не есть яблоко, иначе их сразу съест кто-то второй.

4 демона — яблоко целое, больше ничего не происходит.

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

5 демонов

Если в деревне будет 5 демонов, то случится такое:

  1. Первый демон съест яблоко и уснёт.
  2. Ситуация превратится в предыдущую, только вместо яблока — спящий демон.
  3. В предыдущей ситуации никто из демонов ничего не ел, чтобы с ним ничего не случилось.

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

5 демонов — яблоко съедено, больше ничего не происходит.

Это называется математическая индукция, когда можно делать выводы и опираться на результаты предыдущих вычислений и опытов.

По этой индукции получается, что если в деревне будет 65 демонов (а это нечётное число), то один из них съест яблоко и больше ничего не произойдёт. А вот если бы их было 64, то яблоко бы осталось целым.

Художник:

Алексей Сухов

Корректор:

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

Вёрстка:

Кирилл Климентьев

Соцсети:

Виталий Вебер

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