How to Perform Frog Jumping in Python


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:
        posSet.add(i)
        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
        indexes.add(index)
        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)