## The challenge#

You have an array of integers and have a frog at the first position

`[Frog, int, int, int, ..., int]`

The integer itself may tell you the length and the direction of the jump

For instance:

`````` 2 = jump two indices to the right
-3 = jump three indices to the left
0 = stay at the same position
``````

Your objective is to find how many jumps are needed to jump out of the array.

Return `-1` if Frog can’t jump out of the array

Example:

``````array = [1, 2, 1, 5];
jumps = 3  (1 -> 2 -> 5 -> <jump out>)
``````

## The solution in Python code#

Option 1:

``````def solution(a):
if not a: return -1
posSet, i = set(), 0
while i not in posSet:
i += a[i]
if not (0 <= i < len(a)):
return len(posSet)
return -1
``````

Option 2:

``````def solution(a):
steps = 0
index = 0
length = len(a)
indexes = set()
while 0 <= index < length:
if index in indexes:
return -1
index += a[index]
steps += 1
return steps
``````

Option 3:

``````def solution(a):
c = i = 0
while i >= 0 and i < len(a) and c<20 : i += a[i] ; c += 1
return [c,-1][c==20]
``````

## Test cases to validate our solution#

``````import test
from solution import solution

@test.describe("Sample tests")
def _():
@test.it("Tests")
def __():
test.assert_equals(solution([1, 2, 2, -1]), 4)
test.assert_equals(solution([1, 2, 1, 5]), 3)
test.assert_equals(solution([1, -1]), -1)
``````