You are given two non-empty arrays A and B consisting of N integers. Arrays A and B represent N voracious fish in a river, ordered downstream along the flow of the river.
The fish are numbered from 0 to N − 1. If P and Q are two fish and P < Q, then fish P is initially upstream of fish Q. Initially, each fish has a unique position.
Fish number P is represented by A[P] and B[P]. Array A contains the sizes of the fish. All its elements are unique. Array B contains the directions of the fish. It contains only 0s and/or 1s, where:
- 0 represents a fish flowing upstream,
- 1 represents a fish flowing downstream.
If two fish move in opposite directions and there are no other (living) fish between them, they will eventually meet each other. Then only one fish can stay alive − the larger fish eats the smaller one. More precisely, we say that two fish P and Q meet each other when P < Q, B[P] = 1 and B[Q] = 0, and there are no living fish between them. After they meet:
- If A[P] > A[Q] then P eats Q, and P will still be flowing downstream,
- If A[Q] > A[P] then Q eats P, and Q will still be flowing upstream.
We assume that all the fish are flowing at the same speed. That is, fish moving in the same direction never meet. The goal is to calculate the number of fish that will stay alive.
For example, consider arrays A and B such that:
A[0] = 4 B[0] = 0 A[1] = 3 B[1] = 1 A[2] = 2 B[2] = 0 A[3] = 1 B[3] = 0 A[4] = 5 B[4] = 0Initially all the fish are alive and all except fish number 1 are moving upstream. Fish number 1 meets fish number 2 and eats it, then it meets fish number 3 and eats it too. Finally, it meets fish number 4 and is eaten by it. The remaining two fish, number 0 and 4, never meet and therefore stay alive.
Write a function:
def solution(A, B)
that, given two non-empty arrays A and B consisting of N integers, returns the number of fish that will stay alive.
For example, given the arrays shown above, the function should return 2, as explained above.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..100,000];
- each element of array A is an integer within the range [0..1,000,000,000];
- each element of array B is an integer that can have one of the following values: 0, 1;
- the elements of A are all distinct.
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [];
downSize = 0;
upSta
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
upStack[upSize] = A[i]
upSize += 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upStack = []
upSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
upStack[upSize] = A[i]
upSize += 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upStack = []
upSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
upStack[upSize] = A[i]
upSize += 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
upStack[upSize] = A[i]
upSize += 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] >
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize]
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]
downSize -= 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0
upALive += 1
return
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0
upALive += 1
return downSize+upALive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0
upALive += 1
return downSize+upALive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 80, in main sol = __import__('solution') File "/tmp/solution.py", line 18 if downSize is 0 ^ SyntaxError: invalid syntax
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upALive += 1
return downSize+upALive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 11, in solution for i in xrange(len(A)): NameError: name 'xrange' is not defined
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upALive += 1
return downSize+upALive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downsize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upALive += 1
return downSize+upALive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 13, in solution downStack[downsize] = A[i] NameError: name 'downsize' is not defined
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upALive += 1
return downSize+upALive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 13, in solution downStack[downSize] = A[i] IndexError: list assignment index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = []
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upALive += 1
return downSize+upALive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [] * len(A)
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upALive += 1
return downSize+upALive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 13, in solution downStack[downSize] = A[i] IndexError: list assignment index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upALive += 1
return downSize+upALive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 21, in solution return downSize+upALive UnboundLocalError: local variable 'upALive' referenced before assignment
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upALive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 21, in solution return downSize+upALive NameError: name 'upALive' is not defined
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in xrange(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 11, in solution for i in xrange(len(A)): NameError: name 'xrange' is not defined
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-len(A)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print downStack[downSize]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print downStack[downSize]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 80, in main sol = __import__('solution') File "/tmp/solution.py", line 14 print downStack[downSize] ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print(downStack[downSize])?
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print (downStack[downSize]
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print (downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)-1)):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A))):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A))):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A))):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
-1 5 -2 1 -3 2 -4
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
5 1 2
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)), -1):
print i
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
-1 5 -2 1 -3 2 -4
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 17, in solution while A[i] > downStack[downSize-1]: IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upALive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upALive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 18, in solution upALive += 1 UnboundLocalError: local variable 'upALive' referenced before assignment
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 20, in solution while A[i] > downStack[downSize-1]: IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upALive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upALive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 18, in solution upALive += 1 UnboundLocalError: local variable 'upALive' referenced before assignmentstdout:
5 1 2
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 20, in solution while A[i] > downStack[downSize-1]: IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upALive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upALive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 19, in solution upALive += 1 UnboundLocalError: local variable 'upALive' referenced before assignmentstdout:
-1 5 -2 1 -3 2 -4
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 21, in solution while A[i] > downStack[downSize-1]: IndexError: list index out of rangestdout:
-1
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize > 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
-1 5 -2 1 -3 2 -4 -5 4
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 21, in solution while A[i] > downStack[downSize-1]: IndexError: list index out of rangestdout:
-1
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 101, in main result = solution( A, B ) File "/tmp/solution.py", line 21, in solution while A[i] > downStack[downSize-1]: IndexError: list index out of rangestdout:
-1 -2 -3 2 -4
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 80, in main sol = __import__('solution') File "/tmp/solution.py", line 23 if downSize is 0 ^ SyntaxError: invalid syntax
Traceback (most recent call last): File "exec.py", line 139, in <module> main() File "exec.py", line 80, in main sol = __import__('solution') File "/tmp/solution.py", line 23 if downSize is 0 ^ SyntaxError: invalid syntax
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
print(i)
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
[[4, 3, 2, 1, 5], [0, 0, 0, 1, 1]]
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
[[4, 3, 2, 1, 5], [0, 0, 0, 1, 1]]
[[4, 3, 2, 1, 5], [0, 0, 0, 0, 0]]
function result: 4
function result: 5
function result: 5
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize is 0: # a upstream fish meets no downstream fish
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize is 0: # there's no downstream fish ahead of a upstream fish
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
# print(downStack[downSize])
downSize += 1
else:
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
if B[i] is 0: # push to downstream stack
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
# eats all the
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
# eats all the smaller downstream fish ahead
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
# eats all the smaller downstream fish ahead
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
# it is alive if it eat th
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
# eats all the smaller downstream fish ahead
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
# it is alive if it eat them all
if downSize is 0:
upAlive += 1
return downSize+upAlive
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
# eats all the smaller downstream fish ahead
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
# it is alive if it eat them all
if downSize is 0:
upAlive += 1
return downSize+upAlive
[[4, 3, 2, 1, 5], [0, 1, 0, 1, 1]]
[[4, 3, 2, 1, 5], [0, 0, 0, 1, 1]]
[[4, 3, 2, 1, 5], [0, 0, 0, 0, 0]]
function result: 4
function result: 5
function result: 5
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(A, B):
downStack = [0] * len(A)
downSize = 0
upAlive = 0
for i in range(-1, -1*(len(A)+1), -1):
# push to downstream stack
if B[i] is 0:
downStack[downSize] = A[i]
downSize += 1
else:
# there's no downstream fish ahead of a upstream fish
if downSize is 0:
upAlive += 1
else:
# eats all the smaller downstream fish ahead
while A[i] > downStack[downSize-1]:
downSize -= 1
if downSize is 0:
break
# it is alive if it eat them all
if downSize is 0:
upAlive += 1
return downSize+upAlive
The solution obtained perfect score.