On the sequence of logical values (True or False) we can build up an OR-Pascal-triangle structure. Instead of summing the values, as in a standard Pascal-triangle, we will combine them using the OR function. That means that the lowest row is simply the input sequence, and every entry in each subsequent row is the OR of the two elements below it. For example, the OR-Pascal-triangle built on the array [True, False, False, True, False] is as follows:
Your job is to count the number of nodes in the OR-Pascal-triangle that contain the value True (this number is 11 for the animation above).
Write a function:
def solution(P)
that, given an array P of N Booleans, returns the number of fields in the OR-Pascal-triangle built on P that contain the value True. If the result is greater than 1,000,000,000, your function should return 1,000,000,000.
Given P = [True, False, False, True, False], the function should return 11, as explained above.
Given P = [True, False, False, True], the function should return 7, as can be seen in the animation below.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..100,000].
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(P):
count = 0
total = f(len(P))
falses = 0
for x in P:
if x:
count += f(falses)
falses = 0
else:
falses += 1
count += f(falses)
return int(total - count)
def f(num):
return num * (num+1) / 2
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(P):
count = 0
total = f(len(P))
falses = 0
for x in P:
if x:
count += f(falses)
falses = 0
else:
falses += 1
count += f(falses)
result = int(total - count)
return if (result > 1000000000) 1000
def f(num):
return num * (num+1) / 2
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(P):
count = 0
total = f(len(P))
falses = 0
for x in P:
if x:
count += f(falses)
falses = 0
else:
falses += 1
count += f(falses)
result = int(total - count)
return if (result > 1000000000) 1000000000 else result
def f(num):
return num * (num+1) / 2
Traceback (most recent call last):
File "exec.py", line 129, in <module>
main()
File "exec.py", line 70, in main
sol = __import__('solution')
File "/tmp/solution.py", line 16
return if (result > 1000000000) 1000000000 else result
^
SyntaxError: invalid syntax
Traceback (most recent call last):
File "exec.py", line 129, in <module>
main()
File "exec.py", line 70, in main
sol = __import__('solution')
File "/tmp/solution.py", line 16
return if (result > 1000000000) 1000000000 else result
^
SyntaxError: invalid syntax
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(P):
count = 0
total = f(len(P))
falses = 0
for x in P:
if x:
count += f(falses)
falses = 0
else:
falses += 1
count += f(falses)
result = int(total - count)
return 1000000000 if (result > 1000000000) else result
def f(num):
return num * (num+1) / 2
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(P):
count = 0
total = f(len(P))
falses = 0
for x in P:
if x:
count += f(falses)
falses = 0
else:
falses += 1
count += f(falses)
result = int(total - count)
return 1000000000 if (result > 1000000000) else result
def f(num):
return num * (num+1) / 2
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(P):
count = 0
total = f(len(P))
falses = 0
for x in P:
if x:
count += f(falses)
falses = 0
else:
falses += 1
count += f(falses)
result = int(total - count)
return 1000000000 if (result > 1000000000) else result
def f(num):
return num * (num+1) / 2
The solution obtained perfect score.