Advertisement
manish

Untitled

Mar 15th, 2023
552
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.10 KB | None | 0 0
  1. from fractions import Fraction
  2. from collections import deque
  3. start = [[0]*3 for i in range(3)]
  4. start[0][0], start[1][1], start[2][2] = 2, 3, 4
  5. queue = deque([str(start)])
  6.  
  7. states = {queue[-1]: []}
  8. minDiff = (100, [])
  9. while queue:
  10.     cur = queue.popleft()
  11.     for x in range(3):
  12.         for y in range(3):
  13.             if x == y: continue
  14.             state = eval(cur)
  15.             diff = min(4-sum(state[y]), sum(state[x]))
  16.             portions = [Fraction(state[x][i], sum(state[x])) * diff for i in range(3)]
  17.             for i in range(3):
  18.                 state[y][i] += portions[i]
  19.                 state[x][i] -= portions[i]
  20.             for i in range(3):
  21.                 if min(state[i]) == 0: continue
  22.                 perc_diff = Fraction(max(state[i]) - min(state[i]), sum(state[i]))
  23.                 if perc_diff < minDiff[0]:
  24.                     minDiff = (perc_diff, states[cur] + [(x + 1, y + 1)])
  25.                     print(minDiff)
  26.             state = str(state)
  27.             if state in states: continue
  28.             states[state] = states[cur] + [(x + 1, y + 1)]
  29.             queue += [state]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement