Написать программу где выложено некое поле размером
1×n клеток. В каждой клетке записано некоторое число. Если на поле есть два одинаковых числа, то их можно объединить. Операция объединения удаляет два числа, над которыми была произведена операция, а также создает новое число (на одной из освободившийся клетке), которое на единицу больше удаленных. Например, если была объединена пара двоек, то они будут удалены, а новым числом будет 3. Игра считается законченной, если было получено некоторое загаданное число m или на поле больше нет одинаковых чисел.
python
def game_finished(field, target, current_sum):
if current_sum == target:
return True
# Проверка наличия одинаковых чисел на поле
for row in field:
for i in range(len(row)-1):
if row[i] == row[i+1]:
return False
return True
def combine_numbers(field, i, j):
'''
Функция объединения чисел
'''
new_number = field[i][j] + 1
del field[i][j]
del field[i][j]
field[i].insert(j, new_number)
def solve(field, target, current_sum):
if game_finished(field, target, current_sum):
return True
for i in range(n):
for j in range(len(field[i]) - 1):
# Проверяем возможность объединения двух чисел
if field[i][j] == field[i][j+1]:
new_field = [row.copy() for row in field] # Создаем копию текущего состояния поля
combine_numbers(new_field, i, j) # Объединяем два числа
if solve(new_field, target, current_sum + 1):
return True
return False
n = int(input("Введите размер поля: "))
field = []
for i in range(n):
row = list(map(int, input(f"Введите числа для {i+1}-й строки: ").split()))
field.append(row)
target = int(input("Введите загаданное число: "))
result = solve(field, target, sum([sum(row) for row in field]))
if result:
print("Игра закончена")
else:
print("Игра не закончена")
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет