Игры. Клеточные автоматы
Пример 6. Рассмотрим игру, которая является обобщением игры из примера 5. Она заключается в следующем. Имеется n кучек. Два игрока ходят по очереди. За один ход игрок может взять от 1 до 3 камней из любой кучки. Выигрывает тот, кто берет последний камень.
Пусть кучка i содержит xi камней, для . По теореме, функция Шпрага-Гранди для этой игры имеет вид:
Поэтому позиция является проигрышной тогда и только тогда, когда побитовая строгая дизъюнкция остатков от деления на 4 чисел равна 0, для .
Найдем выигрышную стратегию игры. Заметим, что свойство позиции быть выигрышной или проигрышной зависит только от двух младших разрядов двоичного представления чисел , для .
Положим .
Очевидно, что . Пусть и i - старший разряд двоичного представления числа x, значение которого равно 1. Тогда существует число , в i-ом разряде двоичного представления которого стоит 1, так как i-ым является один из двух младших разрядов.
Заметим, что значения двоичных разрядов, старших i, чисел и совпадают, при этом в разряде i числа стоит 1, а в том же разряде числа стоит 0. Отсюда следует, что, во-первых, и что, во-вторых, .
Заметим также, что , так как . Следовательно,
Таким образом, выигрышный ход - взять () камней из кучки, в которой находится камней.
Например, пусть кучки содержат 9, 6, 5 и 4 камня. Тогда 9 mod 4 \oplus 6 mod 4 \oplus 5 mod 4 \oplus 4 mod 4 = 1 \oplus 2 \oplus 1 \oplus 0 = 2.
Следовательно, позиция является выигрышной. Номер старшего ненулевого двоичного разряда числа 2 равен 1. Этот же разряд является ненулевым у числа 6. Имеем: . Поэтому выигрышный ход состоит в том, чтобы взять 2 камня из кучки, содержащей 6 камней.
Проигрышные позиции игры "Ним" с тремя кучками
Проигрышные позиции в игре "Ним" с тремя кучками обладают интересными свойствами.
Рассмотрим метод поиска проигрышных позиций для игры "Ним" с тремя кучками, который является сочетанием методов из п. 5.1.2 и 5.1.4.
Проигрышные позиции с ненулевыми упорядоченными значениями компонент можно построить с помощью таблицы сложения для операции (см. ниже), так как число камней в третьей кучке равно результату применения операции \oplus к числу камней в первой и второй кучках. Эти позиции имеют вид:
(1, 2k, 2k + 1); (2, 4k, 4k + 2); (3, 4k, 4k + 3); (2, 4k + 1, 4k + 3); (3, 4k + 1, 4k + 2); (4, 8k, 8k + 4); (5, 8k, 8k + 5); (4, 8k + 1, 8k + 5); (5, 8k + 1, 8k + 4); (4, 8k + 2, 8k + 6); (5, 8k + 2, 8k + 7); (4, 8k + 3, 8k + 7); (5, 8k + 3, 8k + 6); (6, 8k, 8k + 6); (7, 8k, 8k + 7); (6, 8k + 1, 8k + 7); (7, 8k + 1, 8k + 6); (6, 8k + 2, 8k + 4); (7, 8k + 2, 8k + 5); (6, 8k + 3, 8k + 5); (7, 8k + 3, 8k + 4); …
для При фиксированном значении k проигрышные позиции находятся с помощью двоичного представления чисел, равных количеству камней в первых двух кучках. Например, при k = 1 для числа камней в первых двух кучках имеем:
1 1 1 1 10 10 10 10 ...
Вместо знака следует подставлять значения 0 и 1. Соответственно, при k = 1 имеется одна позиция, первая компонента в которой равна 1, четыре позиции, первая компонента которых равна 2 или 3, и 16 позиций, первая компонента которых равна 4, 5, 6 или 7, и так далее.
Соответственно, при k = 2 двоичное представление числа камней в первых двух (наименьших) кучках имеет вид:
1 1 1 1 100 100 100 100 ...
В общем случае, для целого неотрицательного s положим и . Тогда проигрышными являются позиции, первая компонента которых равна , вторая компонента принимает значения , для , а третья компонента равна результату применения операции bitXor к первым двум компонентам.
Таким образом, пусть m - минимальное число камней в трех кучках, p - наименьшая степень 2, такая что m < p, и . Тогда проигрышные позиции, содержащие m, находятся следующим образом:
Пример 7. Пусть m = 10, тогда p = 16 и q = 8. Проигрышные позиции с минимальным числом камней в трех кучках, равным 10, имеют вид:
(10, 16k, 16k + 10), (10, 16k + 4, 16k + 14), (10, 16k + 1, 16k + 11), (10, 16k + 5, 16k + 15), (10, 16k + 2, 16k + 8), (10, 16k + 6, 16k + 12), (10, 16k + 3, 16k + 9), (10, 16k + 7, 16k + 13),
для , или
Рассмотрим таблицу сложения для операции , которая используется для построения проигрышных позиций в игре с тремя кучками: найдем значения , для и , где , для целого положительного числа s. Таблицы сложения для значений q, равных 2, 4 и 8 приведены в рис. 5.2.
Из свойств побитовой операции строгой дизъюнкции следует, что таблицы сложения в данном случае можно строить по определенному правилу, без вычисления двоичных представлений чисел x и y. Достаточно использовать схему, приведенную на рис. 5.3.
Схема применяется следующим образом. Заполнение таблиц начинается из углов, обозначенных жирными черными точками. В них помещается значение q. В направлениях, указанных стрелками, значения элементов таблицы увеличиваются на 1 в каждом столбце или строке. После заполнения крайних рядов, таблица делится на 4 равные по размеру квадратные подтаблицы, а затем та же схема применяется для заполнения пустых ячеек каждой из полученных таблиц (см. рис. 5.2). Заметим также, что, как элементы главной диагонали, так и элементы побочной диагонали каждой таблицы равны между собой. Например, для q = 4 получится результат, приведенный в рис. 5.4.
Нетрудно заметить, что таблицы могут быть построены итеративно: текущая таблица получается из предыдущей заменой каждой ее ячейки таблицей 2 * 2 по правилу
при этом нулевой является таблица (1). Если одинаковые числа заменить квадратами одинакового цвета, то при q = 64 получится один из вариантов раскраски квадрата, приведенный на рис. 5.5.