История изменений
Исправление kipar_2024, (текущая версия) :
Всё, я решил. Вопросы получаются довольно громоздкими, но к счастью спрашиваю я программистов (а не стражников, как заведено в таких задачах), так что думаю они справятся.
Леммы.
-
Неопределенность «фиг знает»\ХЗ мы нейтрализуем оборачивая каждый вопрос в «если ХЗ означает «нет», то ответь на Х, а если ХЗ это «да» то ответь на !Х». Памятуя о придирках которые я встретил на другом форуме с похожей задачей, сформулирую сразу как вопрос: "Верно ли, что истинность Х равна истинности утверждения «ХЗ означает «нет»?». Также можно сформулировать это как «ответь на X xor (ХЗ означает «да»)» или «Х? Инвертируй ответ если ХЗ означает да.»
-
Конструкция «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего Х, а потом спросил бы его и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке вопросов соврал бы, то ответ был бы…» позволяет получить правдивый ответ на вопрос всегда кроме случая когда мы спрашиваем гошника (в этом случае ответ будет бесполезным).
-
Первый вопрос позволяет нам разбить 6 возможных раскладов на 2 группы по 4 (2 расклада где мы спросили гошника войдут в обе группы т.к. он может ответить что угодно, а 2 других мы можем выбрать подобрав правильный вопрос). Разобьем так чтобы в каждой группе мы точно знали одного не-гошника (т.е. при ответе «да» негошник был вторым, а при ответе «нет» негошник был третьим). Тогда спросив негошника мы получим полезный ответ и разобьем группу на 2 группы по 2 расклада, ну и третьим вопросом определим расклад.
Поехали: поставим их в ряд чтобы не путаться и назовем для себя «левый», «средний» и «правый».
Вопрос 1 задаем левому. «Если бы я попросил тебя попросить среднего, чтобы он втайне от тебя спросил правого о том, гошник ли правый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что средний негошник, а если отвечает ХЗ, значит правый - негошник.
Вопрос 2. Спросим выявленного негошника «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, сишник ли ты, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что он сишник, а если отвечает ХЗ, значит он - js-макака.
Ну и наконец вопрос 3: Спросим его же: «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, гошник ли левый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что левый гошник, а если отвечает ХЗ, значит левый негошник и мы в любом случае определили всех трех.
(два последних вопроса можно упростить т.к. мы уже знаем часть информации, и можно обойтись без конструкции из леммы 2, но раз уж на первый вопрос они смогли ответить то не все ли равно).
Исправление kipar_2024, :
Всё, я решил. Вопросы получаются довольно громоздкими, но к счастью спрашиваю я программистов (а не стражников, как заведено в таких задачах), так что думаю они справятся.
Леммы.
-
Неопределенность «фиг знает»\ХЗ мы нейтрализуем оборачивая каждый вопрос в «если ХЗ означает «нет», то ответь на Х, а если ХЗ это «да» то ответь на !Х». Памятуя о придирках которые я встретил на другом форуме с похожей задачей, сформулирую сразу как вопрос: "Верно ли, что истинность Х равна истинности утверждения «ХЗ означает «нет»?». Также можно сформулировать это как «ответь на X xor (ХЗ означает «да»)» или «Х? Инвертируй ответ если ХЗ означает да.»
-
Конструкция «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего Х, а потом спросил бы его и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке вопросов соврал бы, то ответ был бы…» позволяет получить правдивый ответ на вопрос всегда кроме случая когда мы спрашиваем гошника (в этом случае ответ будет бесполезным).
-
Первый вопрос позволяет нам разбить 6 возможных раскладов на 2 группы по 4 (2 расклада где мы спросили гошника войдут в обе группы т.к. он может ответить что угодно, а 2 других мы можем выбрать подобрав правильный вопрос). Разобьем так чтобы в каждой группе мы точно знали одного не-гошника (т.е. при ответе «да» негошник был вторым, а при ответе «нет» негошник был третьим). Тогда спросив негошника мы получим полезный ответ и разобьем группу на 2 группы по 2 расклада, ну и третьим вопросом определим расклад.
Поехали: поставим их в ряд чтобы не путаться и назовем для себя «левый», «средний» и «правый».
Вопрос 1 задаем левому. «Если бы я попросил тебя попросить среднего, чтобы он втайне от тебя спросил правого о том, гошник ли правый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что средний негошник, а если отвечает ХЗ, значит правый - негошник.
Вопрос 2. Спросим выявленного негошника «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, сишник ли ты, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что он сишник, а если отвечает ХЗ, значит он - js-макака.
Ну и наконец вопрос 3: Спросим его же: «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, гошник ли левый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что левый гошник, а если отвечает ХЗ, значит левый негошник и мы в любом случае определили всех трех.
Исходная версия kipar_2024, :
Всё, я решил. Вопросы получаются довольно громоздкими, но к счастью спрашиваю я программистов (а не стражников, как заведено в таких задачах), так что думаю они справятся.
Леммы.
-
Неопределенность «фиг знает»\ХЗ мы нейтрализуем оборачивая каждый вопрос в «если ХЗ означает «нет», то ответь на Х, а если ХЗ это «да» то ответь на !Х». Памятуя о придирках которые я встретил на другом форуме с похожей задачей, сформулирую сразу как вопрос: "Верно ли, что истинность Х равна истинности утверждения «ХЗ означает «нет»?». Также можно сформулировать это как «ответь на X xor (ХЗ означает «да»)» или «Х? Инвертируй ответ если ХЗ означает да.»
-
Конструкция «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего Х, а потом спросил бы его и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке вопросов соврал бы, то ответ был бы…» позволяет получить правдивый ответ на вопрос всегда кроме случая когда мы спрашиваем гошника (в этом случае ответ будет бесполезным).
-
Первый вопрос позволяет нам разбить 6 возможных раскладов на 2 группы по 4 (2 расклада где мы спросили гошника войдут в обе группы т.к. он может ответить что угодно, а 2 других мы можем выбрать подобрав правильный вопрос). Разобьем так чтобы в каждой группе мы точно знали одного не-гошника (т.е. при ответе «да» негошник был вторым, а при ответе «нет» негошник был третьим). Тогда спросив негошника мы получим полезный ответ и разобьем группу на 2 группы по 2 расклада, ну и третьим вопросом определим расклад.
Поехали: поставим их в ряд чтобы не путаться и назовем для себя «левый», «средний» и «правый».
Вопрос 1. «Если бы я попросил тебя попросить среднего, чтобы он втайне от тебя спросил правого о том, гошник ли правый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что средний негошник, а если отвечает ХЗ, значит правый - негошник.
Вопрос 2. Спросим выявленного негошника «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, сишник ли ты, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что он сишник, а если отвечает ХЗ, значит он - js-макака.
Ну и наконец вопрос 3: Спросим его же: «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, гошник ли левый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»
Если он отвечает Фиг его знает, значит мы можем быть уверены что левый гошник, а если отвечает ХЗ, значит левый негошник и мы в любом случае определили всех трех.