Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import random
- def is_balanced(board):
- n = len(board)
- for i in range(n-1):
- for j in range(n-1):
- square = {board[i][j], board[i][j+1], board[i+1][j], board[i+1][j+1]}
- if len(square) < 3:
- return False
- return True
- def dominant_lines_pandas(board, k):
- df = pd.DataFrame(board)
- row_reds = (df == 'R').sum(axis=1)
- col_reds = (df == 'R').sum(axis=0)
- dominant_rows = (row_reds >= k).sum()
- dominant_cols = (col_reds >= k).sum()
- return dominant_rows + dominant_cols
- def generate_shifted_board(n, reds_per_row, shift):
- board = [['G' for _ in range(n)] for _ in range(n)]
- for i in range(n):
- for j in range(reds_per_row):
- board[i][(j + shift * i) % n] = 'R'
- # Оставшиеся закрашиваем в синий
- for i in range(n):
- for j in range(n):
- if board[i][j] == 'G':
- board[i][j] = 'B'
- return board
- def random_fill_board(n, reds_per_row):
- board = []
- for i in range(n):
- row = ['B'] * n
- red_indices = random.sample(range(n), reds_per_row)
- for idx in red_indices:
- row[idx] = 'R'
- for j in range(n):
- if row[j] != 'R':
- row[j] = random.choice(['G', 'B'])
- board.append(row)
- return board
- def run_experiments(n, k, num_attempts=1000):
- max_dom_lines = 0
- best_board = None
- # Циклические сдвиги (жадно)
- for shift in range(n):
- board = generate_shifted_board(n, k, shift)
- if is_balanced(board):
- dom_lines = dominant_lines_pandas(board, k)
- if dom_lines > max_dom_lines:
- max_dom_lines = dom_lines
- best_board = [row[:] for row in board]
- # Рандомные генерации
- for _ in range(num_attempts):
- board = random_fill_board(n, k)
- if is_balanced(board):
- dom_lines = dominant_lines_pandas(board, k)
- if dom_lines > max_dom_lines:
- max_dom_lines = dom_lines
- best_board = [row[:] for row in board]
- return max_dom_lines, best_board
- # Параметры
- n = 6
- k = 4
- max_dom_lines, best_board = run_experiments(n, k, num_attempts=2000)
- print("Максимум доминирующих по красному линий:", max_dom_lines)
- print(pd.DataFrame(best_board))
Advertisement
Add Comment
Please, Sign In to add comment