Попробуем использовать модель, аналогичную "машинному обучению с подкреплением"
Первый игрок - это Агент и он стремиться к Победе
Второй игрок - это "Окружающая среда" (ОС) - сообщающая информацию о состоянии
На каждом "такте" (ходе) ОС сообщает информацию о том, куда "можно/безопасно" ходить,
а куда ходить "нельзя/запрещено"
Общая модель решения
1. Определяем параметры игры (будем использовать короткие имена, как на экзамене)
ee - множество параметров, определяющих игру ee[0] = N
G - множество позиций, которое может находиться в игре (может быть разумным)
St - множество стартовых позиций (если есть ограничения на них)
L,W - множества позиций, определяющих стратегию игры.
L - множество позиций в которые "можно" (то есть это поля, стартуя из которых Агент не имеет ВС (выигрышной стратегии)
W - множество позиций, в которые ходить "запрещено" (то есть поля, стартуя из которых Агент имеет ВС, а пойдя в них тереет ВС)
t - номер "такта" игры(получения информации) - на нечётных тактах получаем информацию от поз оициях в которые "можно" ходить (W),
а на нечетных - о "запрещенных" позициях (L)
R - промежуточный результат исследования для каждого такта
ANS - список ответов ОС (ANS[t] = R)
2. Модель решения
# Заполнение/инициализация множеств G, St, L, W и ee
t, ANS = 0, {}
while ( len(G & St) > 0 ) :
t += 1
R = shag (t)
ANS[t] = R
if t % 2 == 1 : W = W.union(R)
if t % 2 == 0 : L = L.union(R)
# Обработка ответов (словаря ANS)