def check_win(board):
# Проверка выигрыша
n = len(board)
lines = []
# Добавляем строки, столбцы и диагонали
lines.extend([board[i,:] for i in range])
lines.extend([board[:,j] for j in range])
lines.append([board[i,i] for i in range])
lines.append([board[i,n-i-1] for i in range])
# Проверяем, есть ли выигрышная линия
for line in lines:
if len(set(line)) == 1 and line[0] != 0:
return True
return False
def play_game:
board = np.zeros((n, n), dtype=int)
players = [1, -1]
num_moves = 0
while not check_win(board) and num_moves < n**2:
player = players[num_moves % 2]
empty_cells = list(zip(*np.where(board == 0)))
if empty_cells:
move = random.choice(empty_cells)
board[move] = player
num_moves += 1
else:
break
return num_moves
def simulate_games(n, num_games):
results = [play_game for _ in range(num_games)]
return min(results), max(results), np.mean(results)
n = int(input("Введите размер игрового поля: "))
num_games = int(input("Введите количество игр для анализа: "))
min_moves, max_moves, avg_moves = simulate_games(n, num_games)
print(f"Минимальное количество ходов до выигрыша: {min_moves}")
print(f"Максимальное количество ходов до выигрыша: {max_moves}")
print(f"Среднее количество ходов до выигрыша: {avg_moves:.2f}") Этот скрипт сначала запрашивает у пользователя размер игрового поля и количество игр для симуляции. Затем он играет указанное количество игр, случайным образом выбирая ходы для крестиков и ноликов, и анализирует результаты, чтобы вычислить минимальное, максимальное и среднее количество ходов до выигрыша.