Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement