Python 3
对于那些正在寻找易于理解的分步说明的人,这是我的 100% 解决方案。
按照课程的建议,它通过 append 和 pop 使用队列/堆栈。
您可以在底部添加各种测试。提交前不要忘记删除打印输出!
def solution(A, B):
N = len(A)
print('START')
print('Fish sizes: ' + str(A))
print('Fish directions: ' + str(B))
print()
upstream = 0
downstream = []
for n in range(N):
fs = A[n]
fd = B[n]
print('Fish pos: ' + str(n) + ', fish dir: ' + str(fd)+ ', fish size: ' + str(fs))
if fd == 0 and downstream == []:
print('No fishes in the way')
upstream += 1
print('Fishes gone upstream: ' + str(upstream))
elif fd == 1:
downstream.append(fs)
print('No fishes in the way')
print('Fishes going downstream: ' + str(downstream))
elif fd == 0 and downstream != []:
print('Challenge!')
while downstream:
# pick the downstream head
pfs = downstream.pop()
# if it's bigger kills upstream, puts back downstream, move on
if pfs > fs:
downstream.append(pfs)
print('Downward eats upward')
print('Fishes going downstream: ' + str(downstream))
break
# if it's smaller don't put it back and move on to next fish
elif pfs < fs:
print('Upward eats downward')
print('Fishes going downstream: ' + str(downstream))
if downstream == []:
upstream += 1
print('Fishes gone upstream: ' + str(upstream))
break
continue
print()
print('FINISH')
print('Fishes gone upstream: ' + str(upstream))
print('Fishes going downstream: ' + str(len(downstream)))
fishes = upstream + len(downstream)
print('Fishes alive: ' + str(fishes))
return fishes
if __name__ == '__main__':
assert solution([4,3,2,1,5], [0,1,0,0,0]) == 2
print('Test 1 OK!')
print()
assert solution([1,2,3,4,5], [1,1,1,1,0]) == 1
print('Test 2 OK!')
print()
assert solution([5,4,3,2,1], [1,0,0,0,0]) == 1
print('Test 3 OK!')
print()
assert solution([1,2,3,4,5], [1,0,0,0,0]) == 4
print('Test 4 OK!')
print()
assert solution([1,2,3,4,5], [1,1,1,1,1]) == 5
print('Test 4 OK!')
print()
这里是逐步解释清楚的输出:
START
Fish sizes: [4, 3, 2, 1, 5]
Fish directions: [0, 1, 0, 0, 0]
Fish pos: 0, fish dir: 0, fish size: 4
No fishes in the way
Fishes gone upstream: 1
Fish pos: 1, fish dir: 1, fish size: 3
No fishes in the way
Fishes going downstream: [3]
Fish pos: 2, fish dir: 0, fish size: 2
Challenge!
Downward eats upward
Fishes going downstream: [3]
Fish pos: 3, fish dir: 0, fish size: 1
Challenge!
Downward eats upward
Fishes going downstream: [3]
Fish pos: 4, fish dir: 0, fish size: 5
Challenge!
Upward eats downward
Fishes going downstream: []
Fishes gone upstream: 2
FINISH
Fishes gone upstream: 2
Fishes going downstream: 0
Fishes alive: 2
Test 1 OK!
START
Fish sizes: [1, 2, 3, 4, 5]
Fish directions: [1, 1, 1, 1, 0]
Fish pos: 0, fish dir: 1, fish size: 1
No fishes in the way
Fishes going downstream: [1]
Fish pos: 1, fish dir: 1, fish size: 2
No fishes in the way
Fishes going downstream: [1, 2]
Fish pos: 2, fish dir: 1, fish size: 3
No fishes in the way
Fishes going downstream: [1, 2, 3]
Fish pos: 3, fish dir: 1, fish size: 4
No fishes in the way
Fishes going downstream: [1, 2, 3, 4]
Fish pos: 4, fish dir: 0, fish size: 5
Challenge!
Upward eats downward
Fishes going downstream: [1, 2, 3]
Upward eats downward
Fishes going downstream: [1, 2]
Upward eats downward
Fishes going downstream: [1]
Upward eats downward
Fishes going downstream: []
Fishes gone upstream: 1
FINISH
Fishes gone upstream: 1
Fishes going downstream: 0
Fishes alive: 1
Test 2 OK!
START
Fish sizes: [5, 4, 3, 2, 1]
Fish directions: [1, 0, 0, 0, 0]
Fish pos: 0, fish dir: 1, fish size: 5
No fishes in the way
Fishes going downstream: [5]
Fish pos: 1, fish dir: 0, fish size: 4
Challenge!
Downward eats upward
Fishes going downstream: [5]
Fish pos: 2, fish dir: 0, fish size: 3
Challenge!
Downward eats upward
Fishes going downstream: [5]
Fish pos: 3, fish dir: 0, fish size: 2
Challenge!
Downward eats upward
Fishes going downstream: [5]
Fish pos: 4, fish dir: 0, fish size: 1
Challenge!
Downward eats upward
Fishes going downstream: [5]
FINISH
Fishes gone upstream: 0
Fishes going downstream: 1
Fishes alive: 1
Test 3 OK!
START
Fish sizes: [1, 2, 3, 4, 5]
Fish directions: [1, 0, 0, 0, 0]
Fish pos: 0, fish dir: 1, fish size: 1
No fishes in the way
Fishes going downstream: [1]
Fish pos: 1, fish dir: 0, fish size: 2
Challenge!
Upward eats downward
Fishes going downstream: []
Fishes gone upstream: 1
Fish pos: 2, fish dir: 0, fish size: 3
No fishes in the way
Fishes gone upstream: 2
Fish pos: 3, fish dir: 0, fish size: 4
No fishes in the way
Fishes gone upstream: 3
Fish pos: 4, fish dir: 0, fish size: 5
No fishes in the way
Fishes gone upstream: 4
FINISH
Fishes gone upstream: 4
Fishes going downstream: 0
Fishes alive: 4
Test 4 OK!
START
Fish sizes: [1, 2, 3, 4, 5]
Fish directions: [1, 1, 1, 1, 1]
Fish pos: 0, fish dir: 1, fish size: 1
No fishes in the way
Fishes going downstream: [1]
Fish pos: 1, fish dir: 1, fish size: 2
No fishes in the way
Fishes going downstream: [1, 2]
Fish pos: 2, fish dir: 1, fish size: 3
No fishes in the way
Fishes going downstream: [1, 2, 3]
Fish pos: 3, fish dir: 1, fish size: 4
No fishes in the way
Fishes going downstream: [1, 2, 3, 4]
Fish pos: 4, fish dir: 1, fish size: 5
No fishes in the way
Fishes going downstream: [1, 2, 3, 4, 5]
FINISH
Fishes gone upstream: 0
Fishes going downstream: 5
Fishes alive: 5
Test 4 OK!
>