Bash Ladder
ladder() {
local -n _aArr="$1"
local -n _bArr="$2"
local -n _outArr="$3"
local _size=${#_aArr[@]}
local _maxB
_maxB=$(printf '%s\n' "${_bArr[@]}" | sort -n | tail -1)
local _mod=$(( (1 << _maxB) - 1 ))
local _limitA
_limitA=$(printf '%s\n' "${_aArr[@]}" | sort -n | tail -1)
local -a _fib=(0 1)
local _i
for ((_i = 2; _i < _limitA + 2; _i++)); do
_fib[_i]=$(( (_fib[_i-1] + _fib[_i-2]) & _mod ))
done
_outArr=()
for ((_i = 0; _i < _size; _i++)); do
_outArr[_i]=$(( _fib[_aArr[_i]+1] & ((1 << _bArr[_i]) - 1) ))
done
}
This precomputes climb counts once and applies the modulo per query, which avoids recalculating the same paths over and over.