Pagini recente » Cod sursa (job #380496) | Cod sursa (job #1381054) | Cod sursa (job #1712456) | Cod sursa (job #865763) | Cod sursa (job #3302614)
class FlipGame:
def __init__(self, in_file):
self.in_file = in_file
self.n = None
self.m = None
self.board = None
def read_board(self):
with open(self.in_file, 'r') as file:
n, m = file.readline().strip().split()
self.n = int(n)
self.m = int(m)
if self.n <= 0 or self.m <= 0:
raise ValueError("Board dimensions must be positive integers.")
if self.n > 16 or self.m > 16:
raise ValueError("Board dimensions must not exceed 16x16.")
board_input = []
with open(self.in_file, 'r') as file:
for ix in range(self.n + 1):
row = list(map(int, file.readline().strip().split()))
if ix != 0:
if len(row) != self.m:
raise ValueError(f"Row length {len(row)} does not match specified m {self.m}.")
board_input.append(row)
self.board = board_input
def col_sum(self, col):
return sum(row[col] for row in self.board)
def row_sum(self, row):
return sum(self.board[row])
def min_sum(self):
ss = 0
tt = (-1, -1)
for i in range(self.n):
if self.row_sum(i) < ss:
ss = self.row_sum(i)
tt = (i, 0)
for j in range(self.m):
if self.col_sum(j) < ss:
ss = self.col_sum(j)
tt = (0, j)
# print(f"Minimum sum is {ss} at {tt}")
return tt
def solve_flip(self):
tt = self.min_sum()
while tt != (-1, -1):
if tt[0] == 0:
# print(f"Flipping column {tt[1]}")
for i in range(self.n):
self.board[i][tt[1]] = -self.board[i][tt[1]]
else:
# print(f"Flipping row {tt[0]}")
for j in range(self.m):
self.board[tt[0]][j] = -self.board[tt[0]][j]
# self.print_board()
tt = self.min_sum()
def print_board(self):
for row in self.board:
print(row)
flip = FlipGame("./flip.in")
flip.read_board()
# print("Initialized FlipGame board:")
# flip.print_board()
# print("Starting to solve the FlipGame...")
flip.solve_flip()
# print("Final FlipGame board:")
# flip.print_board()
# print(f"Total Sum: {sum(sum(row) for row in flip.board)}")
with open("./flip.out", 'w') as file:
file.write(f"{sum(sum(row) for row in flip.board)}\n")