Помощь с задачей Ним с тремя кучками и без ограничения на кол-во забираемых камней. Помогите!
Мне очень нужна помощь. Делаю задачу уже месяц... Никак не могу решить. Игра ним для двух игроков с тремя кучами и без ограничения на количество забираемых камней. Напишите программу с «искусственным интеллектом» (ИИ), которая играет против пользователя и выигрывает, если может. Исходное количество камней в кучах задаёт пользователь, программа всегда ходит первой. Выигрывает забравший последний камень, и при окончании игры нужно объявить победителя. Алгоритм игры выглядит следующим образом:
Сначала пользователь вводит количества камней в кучах (натуральные числа, каждое на новой строке). Затем первый ход делает программа и выводит через пробел пять чисел: из какой кучи взяты камни; сколько камней взято; сколько камней осталось в кучах, сначала в первой, затем во второй, а потом и в третьей Затем ход делает пользователь: вводит на отдельных строках номер кучи и количество камней, которые он хочет взять. Если ход некорректный, например, пользователь пытается взять камней больше, чем есть в куче, программа должна вывести: Некорректный ход: <куча> <кол-во камней> и ожидать нового ввода пользователя. После каждого корректного хода игрока или ИИ нужно выводить пять чисел, как и после первого хода ИИ. Если выигрывает игрок, то надо вывести фразу: Вы выиграли!, а если ИИ – фразу: ИИ выиграл! Все сообщения программы должны строго соответствовать условию.
Формат ввода Для старта игры вводятся три натуральных числа. Пример диалога игры:
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