05AB1E , 13 12 octets
ÝI<ãʒ.øDŸQ}g
Essayez-le en ligne!
Bien que la plupart des réponses utilisent une formule ou une relation de récurrence, il s'agit d'une approche de comptage simple.
Chaque chemin possible à travers la grille est représenté par la liste de ses coordonnées y. Pour n segments, il y a un total de (n + 1) points, mais le premier et le dernier sont nécessairement 0, ce qui laisse (n-1) points à spécifier.
Ý # range [0..n]
I< # n - 1
ã # cartesian power
Nous avons maintenant une liste de chemins (n'incluant pas encore le 0 initial et le 0 final). Par construction, aucun d'entre eux ne descend jamais en dessous de 0. Cependant, certains d'entre eux ont des pentes illégales (par exemple sauter de 0 à 2), nous devons donc les filtrer.
ʒ }g # count how many paths satistfy the following condition
0.ø # surround with 0
Q # is equal to
DŸ # its own fluctuating range
Ÿ
est la plage de fluctuation intégrée. S'il y a une paire de nombres non adjacents, elle remplira les nombres manquants (par exemple [0, 2] devient [0, 1, 2]). Seuls les chemins légaux resteront inchangés.
Une façon peut-être plus intuitive de vérifier les pentes illégales serait üαà
(affirmer que le maximum de différences absolues par paire est égal à 1). Cependant, cela manque le chemin plat [0, 0, ... 0], qui coûte un octet supplémentaire à corriger.
Enfin, notez que le code réel utilise .ø
où cette explication utilise 0.ø
. Au lieu d'entourer le chemin avec 0, cela entoure l'entrée implicite avec deux copies du chemin. Cela met le système de coordonnées à l'envers et à l'envers, mais est par ailleurs équivalent.