Иикэ-Баана (квест)/Прохождение

*Чтобы ознакомиться с общей информацией о квесте, не содержащей спойлеры, перейдите на страницу квеста.*

## Цель квеста

Рейнджера Грефа наняли, чтобы он выступил на соревнованиях по Иикэ-Баане, однако когда он прибыл на планету назначения, оказалось, что соревнования уже закончились. Под угрозой скандала рейнджеру удалось выбить для себя право поединка с действующим чемпионом и в случае успеха самому получить этот престижный титул. Квест линеен и не имеет альтернативных путей прохождения, однако начальные условия с каждым прохождением будут меняться.

В полной иикэ-баане по три цветка пяти цветов. Игрок может добавлять в неё сколько угодно цветков одного цвета; выигрывает тот, на чьём ходу иикэ-баана станет полной.

Чемпион играет идеально, и если хоть раз дать слабину, он перехватывает инициативу.

## Прохождение

Вот самая легко запоминаемая из выигрышных стратегий.

Вычёркиваем все цифры 3. Также попарно вычёркиваем одинаковые цифры.

* Всё вычеркнулось → проигрыш, просим ходить чемпиона
* Остался один цвет → дополняем его до 3
* Остались два цвета (например, 0 и 2) → дополняем меньший до большего
* Остались 0, 1 и 2 → проигрыш, просим ходить чемпиона
* Если можно повторить ход чемпиона (например, дополнить 1 до 2) → делаем это!

**Пример 1.** В иикэ-баане 0, 3, 1, 1, 0. Вычёркиваем 3, 0 с 0, 1 с 1. Всё вычеркнулось → ситуация проигрышная.

**Пример 2.** В иикэ-баане 1, 1, 0, 1, 3. Вычёркиваем 3, 1 с 1. Остаются 0 и 1 → дополняем 0 до 1.

**Пример 3.** В иикэ-баане 1, 2, 2, 0, 1. Вычёркиваем 1 с 1, 2 с 2. Остался 0 → дополняем его до 3.

**Пример 4.** В получившейся ситуации 1, 2, 2, 3, 1 чемпион дополнил 1 до 3 (3, 2, 2, 3, 1). Повторяем его ход 1→3.

**Пример 5.** В иикэ-баане 0, 0, 0, 2, 1. Вычёркиваем 0 с 0, получаем 0, 1, 2. Ситуация проигрышная.

**Пример 6.** В этой ситуации мы отдали ход чемпиону, он дополнил 0 до 3 (3, 0, 0, 2, 1). Рекомендации 3 и 5 дают разные ходы, и оба они верны: можно как повторить 0→3 (3, 3, 0, 2, 1), так и дополнить 1 до 2 (3, 0, 0, 2, 2).

## Теория

Игра представляет собой знаменитую игру *ним* наоборот: мы не тянем из кучек, а добавляем к ним. 0, 1, 2 и 3 цветка — это кучка из 3, 2, 1 и 0 предметов в классической игре *ним*.

У беспристрастной игры до последнего хода есть *функция Шпрага-Гранди*: если функция нулевая, позиция проигранная. Для классического *нима* с убиранием функция Шпрага-Гранди называется *ним-сумма* — побитовый XOR всех кучек. Операция известна разве что программистам, однако она обладает переместительным и сочетательным законом, а также свойствами x ⊕ 0 = x, x ⊕ x = 0 — это и есть наши правила вычёркивания.

**Чуть более строгие определения.** **Беспристрастная игра** — оба игрока имеют один и тот же набор ходов (вплоть до последствий — в крестиках-ноликах оба могут ходить в одни и те же места, но позиция выйдет разная — так что они не беспристрастны). **Игра до последнего хода** — выигрывает тот, кто сделал последний допустимый ход, и это случается за конечное число ходов. Беспристрастной игрой до последнего хода будет, например, «наборщик» (игроки дописывают буквы, проигрывает составивший слово, а также отдавший противнику позицию, которую до слова не дополнить), если задан словарь. Для любой позиции *x* **функция Шпрага-Гранди** F(*x*) — это наименьший *y*∈ℕ0, которого нет в производных от *x* позициях. Для тупиковых позиций функция Ш-Г, очевидно, равна нулю. Для выигрышных — не ноль, потому что какой-то ход ведёт в тупиковую или другую проигрышную; для проигрышных — ноль, потому что любой ход ведёт в выигрышную. Эти два утверждения зациклены друг на друге, но, поверьте, метод доказательства *трансфинитная индукция* говорит, что они верны. Операция «**побитовый XOR**» — сложение в двоичной системе без переноса в высшие разряды.
Совет «повторить ход противника» следует из тождества a ⊕ x ⊕ x = a ⊕ y ⊕ y.

Зная, как устроен побитовый XOR, можно вывести, что ходы 0→3 и 1→2 всегда равноценны: дают один и тот же побитовый XOR, а значит, ведут оба к выигрышу или к проигрышу. Именно такая ситуация приведена в примере 6. Аналогично равноценны 0→1 и 2→3, и пара 0→2 и 1→3.