Помощь с задачей Ним с тремя кучками и без ограничения на кол-во забираемых камней. Помогите!

Мне очень нужна помощь. Делаю задачу уже месяц... Никак не могу решить. Игра ним для двух игроков с тремя кучами и без ограничения на количество забираемых камней. Напишите программу с «искусственным интеллектом» (ИИ), которая играет против пользователя и выигрывает, если может. Исходное количество камней в кучах задаёт пользователь, программа всегда ходит первой. Выигрывает забравший последний камень, и при окончании игры нужно объявить победителя. Алгоритм игры выглядит следующим образом:

Сначала пользователь вводит количества камней в кучах (натуральные числа, каждое на новой строке). Затем первый ход делает программа и выводит через пробел пять чисел: из какой кучи взяты камни; сколько камней взято; сколько камней осталось в кучах, сначала в первой, затем во второй, а потом и в третьей Затем ход делает пользователь: вводит на отдельных строках номер кучи и количество камней, которые он хочет взять. Если ход некорректный, например, пользователь пытается взять камней больше, чем есть в куче, программа должна вывести: Некорректный ход: <куча> <кол-во камней> и ожидать нового ввода пользователя. После каждого корректного хода игрока или ИИ нужно выводить пять чисел, как и после первого хода ИИ. Если выигрывает игрок, то надо вывести фразу: Вы выиграли!, а если ИИ – фразу: ИИ выиграл! Все сообщения программы должны строго соответствовать условию.

Формат ввода Для старта игры вводятся три натуральных числа. Пример диалога игры:

2
2
2
1 2 0 2 2
1
2
Некорректный ход: 1 2
1
0
Некорректный ход: 1 0
2
1
2 1 0 1 2
3 1 0 1 1
2
1
2 1 0 0 1
3 1 0 0 0
ИИ выиграл!

Написал такой код, но проверяющая система просто выдает error и все. Я не понимаю, в чем проблема. Очень нужна помощь, помогите пожалуйста!

if step == 'ii': # если ходит ии
    if heap1 == 0 and heap2 == 0 and heap3 == 1: # проверка, если в 3 куче 1 камень, то забрать его
        step_heap_ii = 3
        step_num_ii = heap3 
        heap3 -= step_num_ii
        print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
        step = 'user'
        continue
    elif heap1 == 0 and heap2 == 1 and heap3 == 0: # то же самое, но с другой кучкой
        step_heap_ii = 2
        step_num_ii = heap2 
        heap2 -= step_num_ii
        print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
        step = 'user'
        continue
    elif heap1 == 1 and heap2 == 0 and heap3 == 0: # то же самое, но с другой кучкой
        step_heap_ii = 1
        step_num_ii = heap1 
        heap1 -= step_num_ii
        print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
        step = 'user'
        continue
    elif step_heap_user == 2: # если user взял камни из 2 кучки
        if heap2 == 0: # если он забрал все камни из 2 кучки, то забрать все из 3
            step_heap_ii = 3
            step_num_ii = heap3
            heap3 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        elif heap2 == 1: # если он забрал все, кроме одного, забрать из 3 тоже все, кроме 1
            step_heap_ii = 3
            step_num_ii = heap3 - 1
            heap3 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        elif heap3 == 1: # то же самое, но с другой кучкой
            step_heap_ii = 3
            step_num_ii = heap3 - 1
            heap3 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        elif heap2 == heap3: # если кучки равны, то забрать все, кроме 1 из 2 кучки
            step_heap_ii = 2
            step_num_ii = heap2 - 1
            heap2 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        else: # если же ни одно из условий не выполняется (крайне маловероятно), то забрать все, кроме 1 из 2 кучки
            step_heap_ii = 2
            step_num_ii = heap2 - 1
            heap2 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
    elif step_heap_user == 3: # те же действия, только с 3 кучкой
        if heap3 == 0: # если он забрал все камни из 3 кучки, то забрать все из 2
            step_heap_ii = 2
            step_num_ii = heap2
            heap2 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        elif heap3 == 1: # если он забрал все, кроме одного, забрать из 2 тоже все, кроме 1
            step_heap_ii = 2
            step_num_ii = heap2 - 1
            heap2 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        elif heap2 == 1: # то же самое, но с другой кучкой
            step_heap_ii = 3
            step_num_ii = heap3 - 1
            heap3 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        elif heap2 == heap3: # если кучки равны, то забрать все, кроме 1-го из 2-ой кучки
            step_heap_ii = 2
            step_num_ii = heap2 - 1
            heap2 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
        else: # если же ни одно из условий не выполняется (крайне маловероятно), то забрать все, кроме 1 из 2 кучки
            step_heap_ii = 3
            step_num_ii = heap3
            heap3 -= step_num_ii
            print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
            step = 'user'
            continue
    elif step_heap_user == 0: # это, похоже, если ход пользователя неверный... сам не понимаю :/
        step_heap_ii = 1
        step_num_ii = heap1
        heap1 -= step_num_ii
        print(step_heap_ii, step_num_ii, heap1, heap2, heap3)
        step = 'user'
        continue


Ответы (0 шт):