Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for River Crossing by _Chico_
def river_crossing(wolves, goats, cabbages, payload):
# left to right optimal crossing
def l_to_r(n, m):
if payload >= m:
return max(n + m - payload, 0), 0
return 0, n + m - payload
# right to left optimal crossing
def r_to_l(n, m):
if a - n <= A - m:
return a, m
return n, A
a, A = min(goats, wolves + cabbages), max(goats, wolves + cabbages)
# no solution
if payload < a or (2 * payload == 2 * a < A):
return None
# first crossing
l, L, n = *l_to_r(a, A), 1
# step by step crossing
while l or L:
l, L, n = *l_to_r(*r_to_l(l, L)), n + 2
return n
June 5, 2021