from fractions import Fraction
from collections import deque
start = [[0]*3 for i in range(3)]
start[0][0], start[1][1], start[2][2] = 2, 3, 4
queue = deque([str(start)])
states = {queue[-1]: []}
minDiff = (100, [])
while queue:
cur = queue.popleft()
for x in range(3):
for y in range(3):
if x == y: continue
state = eval(cur)
diff = min(4-sum(state[y]), sum(state[x]))
portions = [Fraction(state[x][i], sum(state[x])) * diff for i in range(3)]
for i in range(3):
state[y][i] += portions[i]
state[x][i] -= portions[i]
for i in range(3):
if min(state[i]) == 0: continue
perc_diff = Fraction(max(state[i]) - min(state[i]), sum(state[i]))
if perc_diff < minDiff[0]:
minDiff = (perc_diff, states[cur] + [(x + 1, y + 1)])
print(minDiff)
state = str(state)
if state in states: continue
states[state] = states[cur] + [(x + 1, y + 1)]
queue += [state]
Comments
0 B
|👍
/👎