05AB1E , 13 12 byte
ÝI<ãʒ.øDŸQ}g
Hãy thử trực tuyến!
Trong khi hầu hết các câu trả lời sử dụng một công thức hoặc quan hệ lặp lại, đây là một cách tiếp cận đếm đơn giản.
Mỗi đường dẫn có thể đi qua lưới được biểu diễn bằng danh sách tọa độ y của nó. Đối với n phân đoạn, có tổng số (n + 1) điểm, nhưng điểm đầu tiên và điểm cuối cùng nhất thiết phải là 0, do đó, để lại (n-1) điểm để chỉ định.
Ý # range [0..n]
I< # n - 1
ã # cartesian power
Bây giờ chúng ta có một danh sách các đường dẫn (chưa bao gồm 0 ban đầu và 0 cuối cùng). Bằng cách xây dựng, không ai trong số họ từng xuống dưới 0. Tuy nhiên, một số trong số họ có độ dốc bất hợp pháp (ví dụ: nhảy từ 0 đến 2), vì vậy chúng tôi cần lọc chúng ra.
ʒ }g # count how many paths satistfy the following condition
0.ø # surround with 0
Q # is equal to
DŸ # its own fluctuating range
Ÿ
là phạm vi dao động tích hợp. Nếu có bất kỳ cặp số không liền kề nào, nó sẽ điền vào các số còn thiếu (ví dụ [0, 2] trở thành [0, 1, 2]). Chỉ có đường dẫn hợp pháp sẽ được giữ nguyên.
Một cách có lẽ trực quan hơn để kiểm tra độ dốc bất hợp pháp sẽ là üαà
(khẳng định mức tối đa của sự khác biệt tuyệt đối theo cặp bằng 1). Tuy nhiên, điều này bỏ lỡ đường dẫn [0, 0, ... 0] phẳng, tốn thêm một byte để sửa.
Cuối cùng, lưu ý rằng mã thực tế sử dụng .ø
nơi giải thích này sử dụng 0.ø
. Thay vì bao quanh đường dẫn bằng 0, điều này bao quanh đầu vào ẩn với hai bản sao của đường dẫn. Điều này biến hệ thống tọa độ lộn ngược và từ trong ra ngoài, nhưng nếu không thì tương đương.