Go Ladder
func ladder(a, b []int) []int {
	size := len(a)
	result := make([]int, size)

	maxB := b[0]
	for _, v := range b {
		if v > maxB {
			maxB = v
		}
	}
	mod := (1 << maxB) - 1

	maxA := a[0]
	for _, v := range a {
		if v > maxA {
			maxA = v
		}
	}

	fib := make([]int, maxA+2)
	fib[0], fib[1] = 0, 1
	for i := 2; i < maxA+2; i++ {
		fib[i] = (fib[i-1] + fib[i-2]) & mod
	}

	for i := 0; i < size; i++ {
		result[i] = fib[a[i]+1] & ((1 << b[i]) - 1)
	}

	return result
}

This precomputes climb counts once and applies the modulo per query, which avoids recalculating the same paths over and over.