05AB1E , 13 12 bytes
ÝI<ãʒ.øDŸQ}g
Pruébalo en línea!
Si bien la mayoría de las respuestas usan una fórmula o relación de recurrencia, este es un enfoque de conteo simple.
Cada posible camino a través de la cuadrícula está representado por la lista de sus coordenadas y. Para n segmentos, hay un total de (n + 1) puntos, pero el primero y el último son necesariamente 0, de modo que deja (n-1) puntos para especificar.
Ý # range [0..n]
I< # n - 1
ã # cartesian power
Ahora tenemos una lista de rutas (sin incluir aún el 0 inicial y final). Por construcción, ninguno de ellos baja por debajo de 0. Sin embargo, algunos de ellos tienen pendientes ilegales (por ejemplo, saltan de 0 a 2), por lo que debemos filtrarlos.
ʒ }g # count how many paths satistfy the following condition
0.ø # surround with 0
Q # is equal to
DŸ # its own fluctuating range
Ÿes el rango fluctuante incorporado. Si hay algún par de números no adyacentes, completará los números que faltan (por ejemplo, [0, 2] se convierte en [0, 1, 2]). Solo los caminos legales se dejarán sin cambios.
Quizás sería una forma más intuitiva de verificar pendientes ilegales üαà(afirmar que el máximo de diferencias absolutas por pares es igual a 1). Sin embargo, esto pierde la ruta plana [0, 0, ... 0], que cuesta arreglar un byte extra.
Finalmente, tenga en cuenta que el código real se usa .ødonde se usa esta explicación 0.ø. En lugar de rodear la ruta con ceros, esto rodea la entrada implícita con dos copias de la ruta. Esto pone el sistema de coordenadas al revés y de adentro hacia afuera, pero por lo demás es equivalente.