@kolomiec_artiom

Как решить эту задачу?

Два игрока играют в следующую игру. В координатном пространстве стоит фишка. В начале игры фишка находится в точке с координатами (0, 0, 0). Игроки ходят по очереди. Ход состоит в том, что игрок перемещает фишку из точки с координатами (x, y, z) в одну из трёх точек: (x+3, y, z+2), (x, y+3, z+1), (x+1, y+2, z).

Игра заканчивается, когда расстояние от фишки до начала координат станет не меньше числа 5*sqrt(5).

Выигрывает тот игрок, который сделал последний ход.

а) Кто выигрывает при правильной игре?

б) Какое максимальное количество ходов может понадобиться этому игроку для выигрыша в правильной игре?
  • Вопрос задан
  • 413 просмотров
Решения вопроса 1
longclaps
@longclaps
nxt = [((0, 0, 0),)]
while nxt:
    cur, nxt = nxt, []
    for path in cur:
        x, y, z = path[-1]
        targets = [(a, b, c) for a, b, c in ((x + 3, y, z + 2),
                                             (x, y + 3, z + 1),
                                             (x + 1, y + 2, z))
                   if a * a + b * b + c * c < 125]
        if targets:
            for abc in targets:
                nxt.append(path + (abc,))
        else:
            print(*[(u - a, v - b, w - c) for (a, b, c), (u, v, w)
                    in zip(path, path[1:])])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы