Tasks Details
**Task Score**
**Correctness**
**Performance**
` A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1`
` A[0] = 0
A[1] = 1
A[2] = 0
A[3] = 1
A[4] = 1`
**RUNTIME ERROR**,
tested program terminated unexpectedly
**WRONG ANSWER**,
got 3 expected 5
**WRONG ANSWER**,
got 2 expected 5
**OK**

function result: 0
**OK**

function result: 10
**OK**

function result: 0
**OK**

function result: 0
**OK**

function result: 10
**OK**

function result: 0
**
O(N)
**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**

easy

1.
PassingCars

Count the number of passing cars on the road.
100%

100%

100%

A non-empty array A consisting of N integers is given. The consecutive elements of array A represent consecutive cars on a road.

Array A contains only 0s and/or 1s:

- 0 represents a car traveling east,
- 1 represents a car traveling west.

The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 ≤ P < Q < N, is passing when P is traveling to the east and Q is traveling to the west.

For example, consider array A such that:

We have five pairs of passing cars: (0, 1), (0, 3), (0, 4), (2, 3), (2, 4).

Write a function:

def solution(A)

that, given a non-empty array A of N integers, returns the number of pairs of passing cars.

The function should return −1 if the number of pairs of passing cars exceeds 1,000,000,000.

For example, given:

the function should return 5, 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 that can have one of the following values: 0, 1.

Copyright 2009–2020 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

Solution

Programming language used Python

Total time used 13 minutes

Effective time used 13 minutes

Notes
*not defined yet*

Task timeline

Code: 02:44:25 UTC,
py,
verify,
result: **Failed**

```
# you can write to stdout for debugging purposes, e.g.
# print "this is a debug message"
def solution(A):
# write your code in Python 2.7
L = len(A)
if L == 1:
return 0
for i in range(L-1):
if A[i]: # 1 or west
A[i] = A[i-1] + 1
else: # 0 or east
A[i] = A[i-1]
n = n + A[i]
if n > 1000000000:
return -1
return n
```

Analysis

expand all
**Example tests**

1.

0.070 s

stderr:

Traceback (most recent call last): File "user.py", line 109, in <module> main() File "user.py", line 86, in main result = sol.solution ( A ) File "/tmp/solution.py", line 16, in solution n = n + A[i] UnboundLocalError: local variable 'n' referenced before assignment

Code: 02:44:45 UTC,
py,
verify,
result: **Failed**

```
# you can write to stdout for debugging purposes, e.g.
# print "this is a debug message"
def solution(A):
# write your code in Python 2.7
L = len(A)
n = 0
if L == 1:
return 0
for i in range(L-1):
if A[i]: # 1 or west
A[i] = A[i-1] + 1
else: # 0 or east
A[i] = A[i-1]
n = n + A[i]
if n > 1000000000:
return -1
return n
```

Analysis

expand all
**Example tests**

1.

0.070 s

Code: 02:47:20 UTC,
py,
verify,
result: **Failed**

```
# you can write to stdout for debugging purposes, e.g.
# print "this is a debug message"
def solution(A):
# write your code in Python 2.7
L = len(A)
n = 0
if L == 1:
return 0
for i in range(L-2, -1, -1):
if A[i]: # 1 or west
A[i] = A[i-1] + 1
else: # 0 or east
A[i] = A[i-1]
n = n + A[i]
if n > 1000000000:
return -1
return n
```

Analysis

expand all
**Example tests**

1.

0.066 s

Code: 02:53:24 UTC,
py,
verify,
result: **Passed**

```
# you can write to stdout for debugging purposes, e.g.
# print "this is a debug message"
def solution(A):
# write your code in Python 2.7
L = len(A)
n = 0
if L == 1:
return 0
for i in range(L-2, -1, -1):
if A[i]: # 1 or west
A[i] = A[i+1] + 1
else: # 0 or east
A[i] = A[i+1]
n = n + A[i]
if n > 1000000000:
return -1
return n
```

Analysis

Code: 02:54:21 UTC,
py,
verify,
result: **Passed**

```
# you can write to stdout for debugging purposes, e.g.
# print "this is a debug message"
def solution(A):
# write your code in Python 2.7
L = len(A)
n = 0
if L == 1:
return 0
for i in range(L-2, -1, -1):
if A[i]: # 1 or west
A[i] = A[i+1] + 1
else: # 0 or east
A[i] = A[i+1]
n = n + A[i]
if n > 1000000000:
return -1
return n
```

User test case 1:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

User test case 2:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

User test case 3:

[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Analysis

expand all
**User tests**

1.

0.069 s

function result: 0

1.

0.069 s

function result: 10

1.

0.069 s

function result: 0

Code: 02:54:40 UTC,
py,
verify,
result: **Passed**

```
# you can write to stdout for debugging purposes, e.g.
# print "this is a debug message"
def solution(A):
# write your code in Python 2.7
L = len(A)
n = 0
if L == 1:
return 0
for i in range(L-2, -1, -1):
if A[i]: # 1 or west
A[i] = A[i+1] + 1
else: # 0 or east
A[i] = A[i+1]
n = n + A[i]
if n > 1000000000:
return -1
return n
```

User test case 1:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

User test case 2:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

User test case 3:

[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Analysis

expand all
**User tests**

1.

0.030 s

function result: 0

1.

0.031 s

function result: 10

1.

0.032 s

function result: 0

Code: 02:54:42 UTC,
py,
final,
score: **
100
**

```
# you can write to stdout for debugging purposes, e.g.
# print "this is a debug message"
def solution(A):
# write your code in Python 2.7
L = len(A)
n = 0
if L == 1:
return 0
for i in range(L-2, -1, -1):
if A[i]: # 1 or west
A[i] = A[i+1] + 1
else: # 0 or east
A[i] = A[i+1]
n = n + A[i]
if n > 1000000000:
return -1
return n
```

Analysis summary

The solution obtained perfect score.

Analysis

Detected time complexity:

expand all
**Correctness tests**

1.

0.069 s

2.

0.069 s

1.

0.066 s

2.

0.066 s

3.

0.065 s

4.

0.066 s

1.

0.066 s

1.

0.066 s

1.

0.066 s

expand all
**Performance tests**

1.

0.078 s

1.

0.156 s

1.

0.155 s

2.

0.132 s

1.

0.158 s

2.

0.146 s

1.

0.155 s

2.

0.158 s

3.

0.169 s

PDF version of this report that may be downloaded on top of this site may contain sensitive data including personal information. For security purposes, we recommend you remove it from your system once reviewed.