Стол, дырки и бокалы
Nov. 27th, 2011 11:30 pmВ книжке М.Гарднера прочитал любопытную задачу, и, гуляя с ребенком, которому сегодня исполнился ровно год, над ней поразмышлял. Задача простая, но необычная.
Представьте себе вращающийся стол с несколькими глубокими дырками, расположенными симметрично по краю. Например, круглый стол с четырьмя дырками. Дырки не сквозные, это как бы стакан, лунка, внутри которой помещается пустой бокал. Бокал не видно, его можно нащупать только опустив руку в дырку. Бокалы могут стоять на ножке, либо быть перевернутыми. Стол свободно вращается, и абсолютно симметричный. Игра, а это можно рассматривать как игру, начинается с некоторого положения стола и неизвестного расположения бокалов в лунках. Какие-то бокалы стоят, какие-то перевернуты. Известно только, что не все они в одинаковом положении. На каждом ходу игрок может опустить обе руки в любые две произвольные лунки, нащупать бокалы и, если сочтет нужным, перевернуть один или оба. Если все бокалы оказываются в одинаковом положении -- звенит звонок, игра закончена. Иначе игра продолжается. Перед каждым следующим ходом стол очень быстро вращается произвольным образом, и останавливается в случайном положении. В этом вся сложность: игрок не знает, какие лунки он "проверял" на предыдущем ходу. Задача игры -- привести все бокалы в одинаковое положение за минимальное число шагов.
Для случая двух лунок решение тривиальное, трех -- простое. Четырех -- стоит подумать, это и есть основной вопрос задачи. И дополнительный -- доказать, что для пяти и более лунок, не существует стратегии, которая приводит к выигрышу за конечное число шагов.
Комментарии отключены, чтобы не лишать удовольствия подумать над задачей самостоятельно. Если будут какие-то вопросы и уточнения в условие, то я обновлю пост.
Первому, кто правильно ответит, по примеру уважаемого
falcao передается эстафета на интересную задачу.
fregimus первым решил задачу, сначала не совсем оптимально, но потом улучшил решение. На дополнительный вопрос у меня такие же соображения, и они кажутся вполне строгими.
fat_crocodile решил задачу вторым и последним.
Надеюсь, задачка понравилась.
Представьте себе вращающийся стол с несколькими глубокими дырками, расположенными симметрично по краю. Например, круглый стол с четырьмя дырками. Дырки не сквозные, это как бы стакан, лунка, внутри которой помещается пустой бокал. Бокал не видно, его можно нащупать только опустив руку в дырку. Бокалы могут стоять на ножке, либо быть перевернутыми. Стол свободно вращается, и абсолютно симметричный. Игра, а это можно рассматривать как игру, начинается с некоторого положения стола и неизвестного расположения бокалов в лунках. Какие-то бокалы стоят, какие-то перевернуты. Известно только, что не все они в одинаковом положении. На каждом ходу игрок может опустить обе руки в любые две произвольные лунки, нащупать бокалы и, если сочтет нужным, перевернуть один или оба. Если все бокалы оказываются в одинаковом положении -- звенит звонок, игра закончена. Иначе игра продолжается. Перед каждым следующим ходом стол очень быстро вращается произвольным образом, и останавливается в случайном положении. В этом вся сложность: игрок не знает, какие лунки он "проверял" на предыдущем ходу. Задача игры -- привести все бокалы в одинаковое положение за минимальное число шагов.
Для случая двух лунок решение тривиальное, трех -- простое. Четырех -- стоит подумать, это и есть основной вопрос задачи. И дополнительный -- доказать, что для пяти и более лунок, не существует стратегии, которая приводит к выигрышу за конечное число шагов.
Комментарии отключены, чтобы не лишать удовольствия подумать над задачей самостоятельно. Если будут какие-то вопросы и уточнения в условие, то я обновлю пост.
Первому, кто правильно ответит, по примеру уважаемого
Надеюсь, задачка понравилась.
no subject
Date: 2011-11-27 08:39 pm (UTC)Если нет, то вообще не вижу проблемы в решении -- выбрать положение и все бокалы ставить в него.
Если да, то не существует решения для четырёх, т.к. если нам случайно всю дорогу попадаются одни и те же две лунки, а в двух оставшихся бокалы в разном положении, сколько не переворачивай, решения не будет.
Видимо я всё-таки что-то понял неправильно :)
no subject
Date: 2011-11-27 08:53 pm (UTC)На каждом ходу игрок может выбрать любые две лунки на столе, а не только ближайшие к нему. Но после вращения он не знает, какие лунки "проверял" на предыдущем ходу: вращение-то случайное.
no subject
Date: 2011-11-28 03:12 am (UTC)Второй вопрос — бокалы нащупываются после того, как обе лунки выбраны, т. е. можно сначала засунуть одну руку, пощупать, а потом выбрать вторую лунку?
no subject
Date: 2011-11-28 07:24 am (UTC)2. Сначала выбираются лунки, а потом засовываются руки.
no subject
Date: 2011-11-28 11:53 am (UTC)Пусть лунки (а они в углах квадрата) поворачиваются к нам стороной. Пронумеруем их, как будто поля левого нижнего угла шахматной доски. Проверять и переворачивать всегда будем либо a1 и a2, и тогда буду говорить «горизонталь», либо a1 и b2, и это я буду обозначать словом «диагональ».
1. Переворачиваем горизонталь донцами вверх.
2. Переворачиваем диагональ донцами вверх.
3. Поскольку игра не кончилась, имеется один стакан донцем вниз. Проверяем горизонталь. Если имеется стакан донцем вниз, то переворачиваем его, и получаем решение. Если же оба донцами вверх, переворачивам любой. После этого имеем одну из двух позиций:
XO XO
OX XO
где X означает стакан донцем вниз, а O — донцем вверх.
4. Проверяем любую диагональ. Если стаканы одинаковые, переворачиваем их, чем решаем задачу. Если же нет, ничего не переворачиваем. Теперь известно, что позиция правая из деух описанных.
5. Переворачиваем горизонталь не глядя. Если стаканы одинаковые, то это будет решением. В противном случае, позиция превратится в диагональную. Ниже 4 возможные поворота позиции до перестановки стаканов
XO XX OX OO
XO OO OX XX
и соответствующие после
XO XX OX OO
OX XX XO OO
2 и 4 являются решениями. Позиции 1 и 3 симметричны, и по диагонали находятся стаканы разной ориентации, так что
6. переворачиваем диагональ, и это приводит к решению.
У меня 4 утра, а я дремлю и сквозь сон решаю Ваши задачки… Кстати, вот набросок доказательства к тому, что 5 стаканов за ограниченное время не переворачиваются. Гипотеза в том, что при любой стратегии возможны 2 стакана, до которых мы никогда не дотронемся, и, если они ориентированны по-разному, то и не придем к решению. Кажется очевидным, что это так, но формально мне не удается свести это к известным свойствам групп. В полусне, во всяком случае, — буду дальше эту задачку
спатьдумать.no subject
Date: 2011-11-28 05:23 pm (UTC)Для трёх очевидно: если оба в одну сторону, перевернуть их, если в разные, то все вверх, повторять до победы.
Для четырёх можно брать соседние лунки, а можно на противоположных концах стола. Дальше мысль примерно та же, что и для трёх, только, кажется, если каждый раз не везёт, можно так никогда и не закончить. Потому что перевернуть все три одним движением нельзя. На этом мысль пока останавливается.
Для пяти, если не везёт, можно так никогда и не добраться до двух лунок, понятно, что тогда ничего не получится.
no subject
Date: 2011-11-28 06:36 pm (UTC)3. Проверяем диагональ. Если имеется стакан донцем вниз, то переворачиваем его, и получаем решение. Если же оба донцами вверх, переворачивам любой. Переходим сразу к п. 5.
no subject
Date: 2011-11-28 07:39 pm (UTC)И в случае трех, и четырех лунок есть вполне конкретные стратегии игры, приводящие к выигрышу за конечное число шагов даже при тотальном невезении. В этом-то и весь интерес задачки :)
no subject
Date: 2011-11-28 07:43 pm (UTC)Идея в том, что состояние два-на-два очень быстро доводится до конца. Если у нас два-на-два и одинаковые расположены по диагонали, то в один ход: берём, любую диагональ и переворачиваем.
Если одинаковые -- соседние, то один или два хода: берём пару соседних, если они одиаковые, переворачиваем -- готово. Если они разные, тоже переворачиваем оба, почле чего получаем одинаковые пары по диагонали.
Теперь надо привести всё к два-на-два.
Берём два соседних, устанавливаем их вверх.
Берём два диагональных, устанавливаем вверх.
Если не конец, то у нас три-на-один.
Берём два соседних,
-- если один из них вниз -- переворачиваем его вверх, конец.
-- если оба вверх, любой из них переворачиваем вниз. Получили два-на-два, но не известно в какой позиции.
Берём два диагональных.
- если они одинаковые, то одинаковые по диагонали, переворачиваем их, конец.
- если они разные, то одинаковые соседние, не трогаем их, действуем по соотв. алгоритму.
---
Для трёх победа на втором ходе, там это просто понятно.
no subject
Date: 2011-11-29 07:54 am (UTC)no subject
Date: 2011-11-29 07:55 am (UTC)no subject
Date: 2011-11-29 10:52 am (UTC)no subject
Date: 2011-11-29 11:15 am (UTC)no subject
Date: 2011-11-29 11:16 am (UTC)