LINUX.ORG.RU

История изменений

Исправление kipar_2024, (текущая версия) :

Всё, я решил. Вопросы получаются довольно громоздкими, но к счастью спрашиваю я программистов (а не стражников, как заведено в таких задачах), так что думаю они справятся.

Леммы.

  1. Неопределенность «фиг знает»\ХЗ мы нейтрализуем оборачивая каждый вопрос в «если ХЗ означает «нет», то ответь на Х, а если ХЗ это «да» то ответь на !Х». Памятуя о придирках которые я встретил на другом форуме с похожей задачей, сформулирую сразу как вопрос: "Верно ли, что истинность Х равна истинности утверждения «ХЗ означает «нет»?». Также можно сформулировать это как «ответь на X xor (ХЗ означает «да»)» или «Х? Инвертируй ответ если ХЗ означает да.»

  2. Конструкция «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего Х, а потом спросил бы его и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке вопросов соврал бы, то ответ был бы…» позволяет получить правдивый ответ на вопрос всегда кроме случая когда мы спрашиваем гошника (в этом случае ответ будет бесполезным).

  3. Первый вопрос позволяет нам разбить 6 возможных раскладов на 2 группы по 4 (2 расклада где мы спросили гошника войдут в обе группы т.к. он может ответить что угодно, а 2 других мы можем выбрать подобрав правильный вопрос). Разобьем так чтобы в каждой группе мы точно знали одного не-гошника (т.е. при ответе «да» негошник был вторым, а при ответе «нет» негошник был третьим). Тогда спросив негошника мы получим полезный ответ и разобьем группу на 2 группы по 2 расклада, ну и третьим вопросом определим расклад.

Поехали: поставим их в ряд чтобы не путаться и назовем для себя «левый», «средний» и «правый».

Вопрос 1 задаем левому. «Если бы я попросил тебя попросить среднего, чтобы он втайне от тебя спросил правого о том, гошник ли правый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что средний негошник, а если отвечает ХЗ, значит правый - негошник.

Вопрос 2. Спросим выявленного негошника «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, сишник ли ты, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что он сишник, а если отвечает ХЗ, значит он - js-макака.

Ну и наконец вопрос 3: Спросим его же: «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, гошник ли левый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что левый гошник, а если отвечает ХЗ, значит левый негошник и мы в любом случае определили всех трех.

(два последних вопроса можно упростить т.к. мы уже знаем часть информации, и можно обойтись без конструкции из леммы 2, но раз уж на первый вопрос они смогли ответить то не все ли равно).

Исправление kipar_2024, :

Всё, я решил. Вопросы получаются довольно громоздкими, но к счастью спрашиваю я программистов (а не стражников, как заведено в таких задачах), так что думаю они справятся.

Леммы.

  1. Неопределенность «фиг знает»\ХЗ мы нейтрализуем оборачивая каждый вопрос в «если ХЗ означает «нет», то ответь на Х, а если ХЗ это «да» то ответь на !Х». Памятуя о придирках которые я встретил на другом форуме с похожей задачей, сформулирую сразу как вопрос: "Верно ли, что истинность Х равна истинности утверждения «ХЗ означает «нет»?». Также можно сформулировать это как «ответь на X xor (ХЗ означает «да»)» или «Х? Инвертируй ответ если ХЗ означает да.»

  2. Конструкция «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего Х, а потом спросил бы его и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке вопросов соврал бы, то ответ был бы…» позволяет получить правдивый ответ на вопрос всегда кроме случая когда мы спрашиваем гошника (в этом случае ответ будет бесполезным).

  3. Первый вопрос позволяет нам разбить 6 возможных раскладов на 2 группы по 4 (2 расклада где мы спросили гошника войдут в обе группы т.к. он может ответить что угодно, а 2 других мы можем выбрать подобрав правильный вопрос). Разобьем так чтобы в каждой группе мы точно знали одного не-гошника (т.е. при ответе «да» негошник был вторым, а при ответе «нет» негошник был третьим). Тогда спросив негошника мы получим полезный ответ и разобьем группу на 2 группы по 2 расклада, ну и третьим вопросом определим расклад.

Поехали: поставим их в ряд чтобы не путаться и назовем для себя «левый», «средний» и «правый».

Вопрос 1 задаем левому. «Если бы я попросил тебя попросить среднего, чтобы он втайне от тебя спросил правого о том, гошник ли правый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что средний негошник, а если отвечает ХЗ, значит правый - негошник.

Вопрос 2. Спросим выявленного негошника «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, сишник ли ты, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что он сишник, а если отвечает ХЗ, значит он - js-макака.

Ну и наконец вопрос 3: Спросим его же: «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, гошник ли левый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что левый гошник, а если отвечает ХЗ, значит левый негошник и мы в любом случае определили всех трех.

Исходная версия kipar_2024, :

Всё, я решил. Вопросы получаются довольно громоздкими, но к счастью спрашиваю я программистов (а не стражников, как заведено в таких задачах), так что думаю они справятся.

Леммы.

  1. Неопределенность «фиг знает»\ХЗ мы нейтрализуем оборачивая каждый вопрос в «если ХЗ означает «нет», то ответь на Х, а если ХЗ это «да» то ответь на !Х». Памятуя о придирках которые я встретил на другом форуме с похожей задачей, сформулирую сразу как вопрос: "Верно ли, что истинность Х равна истинности утверждения «ХЗ означает «нет»?». Также можно сформулировать это как «ответь на X xor (ХЗ означает «да»)» или «Х? Инвертируй ответ если ХЗ означает да.»

  2. Конструкция «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего Х, а потом спросил бы его и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке вопросов соврал бы, то ответ был бы…» позволяет получить правдивый ответ на вопрос всегда кроме случая когда мы спрашиваем гошника (в этом случае ответ будет бесполезным).

  3. Первый вопрос позволяет нам разбить 6 возможных раскладов на 2 группы по 4 (2 расклада где мы спросили гошника войдут в обе группы т.к. он может ответить что угодно, а 2 других мы можем выбрать подобрав правильный вопрос). Разобьем так чтобы в каждой группе мы точно знали одного не-гошника (т.е. при ответе «да» негошник был вторым, а при ответе «нет» негошник был третьим). Тогда спросив негошника мы получим полезный ответ и разобьем группу на 2 группы по 2 расклада, ну и третьим вопросом определим расклад.

Поехали: поставим их в ряд чтобы не путаться и назовем для себя «левый», «средний» и «правый».

Вопрос 1. «Если бы я попросил тебя попросить среднего, чтобы он втайне от тебя спросил правого о том, гошник ли правый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что средний негошник, а если отвечает ХЗ, значит правый - негошник.

Вопрос 2. Спросим выявленного негошника «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, сишник ли ты, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что он сишник, а если отвечает ХЗ, значит он - js-макака.

Ну и наконец вопрос 3: Спросим его же: «Если бы я попросил тебя попросить второго, чтобы он втайне от тебя спросил третьего о том, гошник ли левый, а потом спросил бы его об ответе и передал мне ответ, и при этом случилось бы так что гошник в этой цепочке соврал бы, то какой был бы ответ? Инвертируй ответ если ХЗ означает да.»

Если он отвечает Фиг его знает, значит мы можем быть уверены что левый гошник, а если отвечает ХЗ, значит левый негошник и мы в любом случае определили всех трех.