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.