Python Fib Frog
from collections import deque
def fib_frog(a: list[int]) -> int:
size = len(a)
fib = [0, 1]
i = 1
while fib[i] <= size:
i += 1
fib.append(fib[i - 1] + fib[i - 2])
queue = deque([(-1, 0)])
visited = [False] * size
while queue:
idx, jumps = queue.popleft()
for f in range(len(fib) - 1, 1, -1):
new_idx = idx + fib[f]
if new_idx == size:
return jumps + 1
if new_idx > size or visited[new_idx] or a[new_idx] == 0:
continue
if a[new_idx] == 1:
visited[new_idx] = True
queue.append((new_idx, jumps + 1))
return -1
This precomputes Fibonacci jumps, then uses a breadth-first search to find the shortest valid path across the river.