Задачка про 2 двери и стражников
Типичный программистУсловие
Перед вами 2 двери. Около каждой из них стоит страж. За одной из этих дверей — сокровище, за второй — смертельно опасный лабиринт.
Известно, оба стража знают, где именно сокровище. Также известно, что один из них всегда говорит правду, а второй — всегда лжет (причём неизвестно, кто есть кто). У вас есть право задать всего один вопрос любому из стражников.
Итак, что вы должны спросить, чтобы гарантированно получить сокровище?
Ответ
Для того, чтобы вы смогли найти нужную дверь, требуется сформулировать вопрос так, чтобы его можно было задать любому из стражников с одинаковым результатом — мы же не знаем, какой именно страж всегда говорит правду, а какой врёт. Зато любой из стражников знает, кем является его товарищ — лгуном или правдивым. Этим и воспользуемся.
Идеальным вопросом в данном случае является «Если я спрошу у другого стражника, за какой дверью сокровище, на какую из двух он укажет?».
В случае, если перед нами «правдивый» страж, он покажет на дверь, за которой будет смертельный лабиринт — это логично, так как «лживый» коллега в любом случае соврёт нам.
В случае же, если перед нами «лживый» стражник, он… тоже укажет нам на дверь, за которой смертельный лабиринт. Ведь он знает, что его правдивый коллега укажет нам настоящую дверь, но правду об этом он сказать не может — приходится лгать.
В результате мы имеем, что, невзирая на то, кто перед нами, стражник в любом случае покажет на дверь, за которой смертельный лабиринт. И вам останется только открыть другую дверь и забрать вознаграждение.