Подтема 2 из 6
Позиции от конца игры
Группы В1, П1, В2, П2: как найти их руками от конца игры и какая группа отвечает на какой вопрос заданий 19–21.
Анализ от конца
Как найти все S, при которых у Пети или у Вани есть выигрышная стратегия?
Идут от конца игры: сначала находят позиции, из которых выигрывают одним ходом, затем — позиции, которые зависят только от уже найденных. У конца игры всё известно: кто дошёл до 21, тот выиграл. Отступая на ход назад, каждый раз опираемся только на то, что уже знаем. Так разберём ту же игру: +1 или ×2, победа при s ≥ 21.
Группы позиций называют для того, кто сейчас ходит, а не для Пети или Вани. Буква — чем кончится игра, если оба играют правильно: В — ходящий выигрывает, П — проигрывает. Цифра — каким по счёту ходом всё решится: для В — своим ходом, для П — ходом соперника. В1 — ходящий выигрывает первым же ходом, П1 — соперник выигрывает своим первым ходом.
В1
Из каких позиций можно выиграть сразу?
В1 — есть ход, после которого игра кончается. Из 11 можно получить 22, значит 11 — В1. Что 11 → 12 игру не заканчивает, неважно: игрок выберет удвоение.
Удвоением выигрывают, когда 2S ≥ 21, то есть S ≥ 11. Прибавлением — только из 20, а оно уже в этом списке. Получаем В1 = 11, 12, …, 20.
Позиция, где порог уже достигнут, — не В1: игра кончилась, ходить больше некому.
П1
А если выиграть сразу нельзя и любой ход отдаёт сопернику В1?
П1 — все ходы ведут в В1 соперника: что ни сделай, он выиграет следующим ходом. Из 10 получается 11 или 20 — обе позиции В1. Значит, 10 — П1.
Других П1 здесь нет. Позиция П1 не может быть В1, поэтому S ≤ 10. И даже слабый ход +1 должен дать В1: S + 1 ≥ 11, то есть S ≥ 10. Остаётся только П1 = 10.
«Проигрыш» здесь значит, что соперник может выиграть наверняка. Если он ошибётся, партия пойдёт иначе.
В2
Как выиграть своим вторым ходом?
В2 — выиграть сразу нельзя, но есть ход в П1: отдаёшь сопернику ловушку и выигрываешь следующим ходом. Ловушка у нас одна — 10. Попасть в неё: S + 1 = 10 или 2S = 10, то есть из 9 и из 5. Сразу ни из 9, ни из 5 не выиграть, поэтому В2 = 5, 9.
Из 5 стратегия — удвоить, из 9 — добавить один. Стратегию из 5 мы уже видели на дереве.
Тонкости:больше камней — не лучше
9 — В2, 10 — П1, 11 — В1. Один камень меняет всё в любую сторону, и близость к порогу ничего не гарантирует. Из 9 удвоение до 18 отдаёт сопернику победу, а прибавление до 10 — ловушку. Хороший ход — тот, после которого у соперника нет хороших ответов.
П2
Когда соперник выигрывает не позже своего второго хода, но сразу — не при любом нашем ходе?
П2 — все ходы ведут в В1 или В2 соперника, но не все — в В1. Отдали сопернику В1 — он выигрывает сразу, В2 — вторым ходом. Если бы все ходы вели в В1, это была бы П1.
Найдём П2 нашей игры. Позиции 10–20 уже заняты, ищем среди 1–9. Проверим оба хода по очереди:
- Ход +1 должен привести в В1 или В2. Из позиций 1–9 он даёт числа от 2 до 10, а из них В2 — только 5 и 9. Значит, кандидаты — 4 и 8.
- Ход ×2 тоже должен привести в В1 или В2. Из 4 получится 8 — это не В1 и не В2, и 4 отпадает. Из 8 получится 16 — это В1.
Остаётся П2 = 8: из 8 Петя попадёт в 9 (В2 Вани) или в 16 (В1 Вани).
Ходы в В1 и в В2 вместе не обязательны: если все ходы ведут в В2, это тоже П2.
Все группы
Как разобрать всю игру сразу?
Группы находят строго по порядку — В1, П1, В2, П2, — и каждая следующая опирается только на уже найденные. Вот все четыре правила на примерах из нашей игры:
Пройди разбор нашей игры по шагам:
- Игра: ходы +1, ×2, победа при s ≥ 21. Начинаем с конца: из каких позиций можно выиграть одним ходом?
- В1 = 11–20: из 11 ход ×2 даёт 22, игра окончена. Из 10 такого хода уже нет.
- П1 = 10: все ходы ведут в В1 соперника. 10: +1 → 11 (В1), ×2 → 20 (В1).
- В2 = 5, 9: не В1, но есть ход в П1. 5: ×2 → 10 (П1); 9: +1 → 10 (П1).
- П2 = 8: все ходы ведут в В1 или В2, но позиция не П1. 8: +1 → 9 (В2), ×2 → 16 (В1).
- 4 не подходит: +1 → 5 (В2), но ×2 → 8, а 8 не В1 и не В2. Соперник не обязан выигрывать за один-два хода — значит, гарантии нет.
- Итог: В1 = 11–20; П1 = 10; В2 = 5, 9; П2 = 8. Позиции 1–4, 6, 7 не попали ни в одну группу: для них нужно смотреть дальше.
Позиции 1–4, 6 и 7 ни в одну группу не попали. Это не значит, что они проигрышные: до победы из них больше двух ходов, а такие задания 19–21 не спрашивают.
Какой вопрос — какая группа
Как вопросы заданий связаны с группами?
Все вопросы — о начальной позиции, где ходит Петя: задание 20 ищет В2, задание 21 — П2, а задание 19 бывает двух видов.
| Вопрос | Что ищем | Ответ |
|---|---|---|
| 19: Ваня выиграл первым ходом после неудачного хода Пети | возможность: плохой ход Пети и победный ответ Вани | 6 |
| 19: Петя не выигрывает сразу, но при любом его ходе Ваня выигрывает первым ходом | П1 | 10 |
| 20: Петя не выигрывает первым ходом, но выигрывает вторым при любой игре Вани | В2 | 5 и 9 |
| 21: Ваня выигрывает первым или вторым ходом, но первым — не гарантированно | П2 | 8 |
Буква группы — про того, кто ходит, а вопрос 21 — про Ваню. В П2 ходит Петя, а выигрывает Ваня. Вот стратегия Вани при S = 8:
Здесь видно и отрицание из задания 21. «Нет стратегии выиграть первым ходом» не значит «первым ходом выиграть нельзя». После 8 → 16 Ваня выигрывает сразу, но Петя может сходить 8 → 9 — и тогда сразу Ване не выиграть. Чтобы опровергнуть «при любом ходе», хватит одного хода-исключения.
Итого
- Группыдля того, кто ходит; находят от конца игры
- В1есть ход, который кончает игру
- П1все ходы ведут в В1
- В2не В1, но есть ход в П1
- П2не П1, но все ходы ведут в В1 или В2
- Задание 19неудачный ход Пети — возможность; «при любом ходе» — П1
- Задание 20В2
- Задание 21П2: «нет гарантии первым» — не «невозможно»
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Задание 19: все ходы в W1
Два игрока, Петя и Ваня, играют в игру с кучей камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или два камня или увеличить количество камней в куче в три раза. Игра завершается, когда количество камней в куче становится не менее 60. Победителем считается игрок, сделавший последний ход. В начальный момент в куче было S камней, 1 ≤ S ≤ 59. Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
Введите число.
Подсказка
Нужна П1: Петя сразу не выигрывает, а каждый его ход отдаёт Ване В1.
Решение
19: В1 — от 20 (3 · 20 = 60), а из 19 получаются 20, 21 и 57 — все В1.
from functools import cache def moves(s): return [s + 1, s + 2, s * 3] def finished(s): return s >= 60 @cachedef g(s): nxt = moves(s) if any(finished(q) for q in nxt): return 1 # В1 r = [g(q) for q in nxt] if all(x == 1 for x in r): return -1 # П1 if -1 in r: return 2 # В2 if all(x > 0 for x in r): return -2 # П2 return 0 print(*[s for s in range(1, 60) if g(s) == -1])Ответ: 19
Задание 20: позиции W2
Игра та же: можно добавить в кучу один или два камня или утроить её; игра завершается, когда в куче не менее 60 камней; 1 ≤ S ≤ 59. Найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия: Петя не может выиграть за один ход; Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Введите два числа через пробел в порядке возрастания.
Подсказка
В2: сразу не выиграть, но можно отдать Ване П1 — позицию 19.
Решение
17 и 18: из 17 ход +2 и из 18 ход +1 ведут в 19 — П1.
from functools import cache def moves(s): return [s + 1, s + 2, s * 3] def finished(s): return s >= 60 @cachedef g(s): nxt = moves(s) if any(finished(q) for q in nxt): return 1 # В1 r = [g(q) for q in nxt] if all(x == 1 for x in r): return -1 # П1 if -1 in r: return 2 # В2 if all(x > 0 for x in r): return -2 # П2 return 0 print(*[s for s in range(1, 60) if g(s) == 2])Ответ: 17 18
Задание 21: позиция L2
Игра та же: можно добавить в кучу один или два камня или утроить её; игра завершается, когда в куче не менее 60 камней; 1 ≤ S ≤ 59. Найдите минимальное значение S, при котором одновременно выполняются два условия: у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети; у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Введите число.
Подсказка
П2: все ходы Пети отдают Ване В1 или В2, но не все — В1.
Решение
16: из 16 получаются 17 и 18 (В2) и 48 (В1).
from functools import cache def moves(s): return [s + 1, s + 2, s * 3] def finished(s): return s >= 60 @cachedef g(s): nxt = moves(s) if any(finished(q) for q in nxt): return 1 # В1 r = [g(q) for q in nxt] if all(x == 1 for x in r): return -1 # П1 if -1 in r: return 2 # В2 if all(x > 0 for x in r): return -2 # П2 return 0 print(min(s for s in range(1, 60) if g(s) == -2))Ответ: 16