Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
2.1 kB
8
Indexable
Never
def tvennekannor(a, b, c, visa_steg=True):
    def euclids_algorithm(a, b):
        while b != 0:
            a, b = b, a % b
        return a

    def extended_gcd(a, b):
        if b == 0:
            return a, 1, 0
        else:
            d, x, y = extended_gcd(b, a % b)
            return d, y, x - (a // b) * y

    def find_solution(a, b, c):
        d = euclids_algorithm(a, b)
        if c % d != 0:
            return None
        else:
            x0, y0 = extended_gcd(a, b)[1:]
            factor = c // d
            return (x0 * factor, y0 * factor)

    if not (0 <= c <= max(a, b) and c % euclids_algorithm(a, b) == 0):
        print("Det går inte att mäta upp", c, "liter med tillgängliga bägare.")
        return []

    A, B = a, 0
    steg = 0
    if visa_steg:
          print(f"Fyll A. (A, B) = ({A}, {B})")

    while B != c:
        if A == 0:
            A = a
            if visa_steg:
                print(f"Fyll A. (A, B) = ({A}, {B})")
            steg += 1

        if B == b:
            B = 0
            if visa_steg:
                print(f"Töm B. (A, B) = ({A}, {B})")
            steg += 1

        häll_mängd = min(A, b - B)
        A -= häll_mängd
        B += häll_mängd

        if visa_steg:
            print(f"Häll över från A till B. (A, B) = ({A}, {B})")
        steg += 1

        if B == c:
            break

    if visa_steg:
        print("Önskad volym i bägare A.")
        print("Antal steg:", steg)

    solution = find_solution(a, -b, c)
    if solution:
        x, y = solution
        if visa_steg:
            print(f"En lösning på den diofantiska ekvationen\n{a}x - {b}y = {c}\när (x, y) = ({x}, {y}).")
        return [steg, x, y]
    else:
        return []


# Användarinput

#Ange volymen av bägare A
a = 10782

#Ange volymen av bägare B
b = 4321

#Ange önskad volym
c = 6091

#b = 2114 fungerar inte,b = 4321 fungera men exceedar max output limit, b = 6885 fungerar inte
resultat = tvennekannor(a, b, c)
print(resultat)
Leave a Comment