def cross(rounds, bank1, boat, bank2): if bank1["Missionaries"] + bank1["Cannibals"] == 0 and boat["Missionaries"] + boat["Cannibals"] == 0: return "Journey complete" elif bank1["Missionaries"] + bank1["Cannibals"] > 0 and boat["Missionaries"] + boat["Cannibals"] < 2: if bank1["Missionaries"] - 1 >= bank1["Cannibals"]: bank1["Missionaries"] -= 1 boat["Missionaries"] += 1 print(rounds, bank1, boat, bank2) elif bank1["Cannibals"] > 0: bank1["Cannibals"] -= 1 boat["Cannibals"] += 1 print(rounds, bank1, boat, bank2) else: if boat["Cannibals"] >= 1 and bank2["Missionaries"] >= bank2["Cannibals"] + 1: bank2["Cannibals"] += 1 boat["Cannibals"] -= 1 elif boat["Missionaries"] >= 1: bank2["Missionaries"] += 1 boat["Missionaries"] -= 1 print(rounds, bank1, boat, bank2) rounds += 1 cross(rounds, bank1, boat, bank2) def main(): bank1 = {"name": "B1", "Missionaries": 3, "Cannibals": 3} bank2 = {"name": "B2", "Missionaries": 0, "Cannibals": 0} boat = {"name": "boat", "Missionaries": 0, "Cannibals": 0} return cross(1, bank1, boat, bank2) print(main())