manish icon

Untitled

manish | PRO | 03/15/23 04:34:45 PM UTC | 0 ⭐ | 804 👁️ | Never ⏰ | []
Python |

1.1 KB

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎