0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Hãy thử trực tuyến!
Một triển khai khá trực tiếp mà đệ quy trên 2 biến.
Đây là cách chúng ta có thể có được giải pháp này. Bắt đầu với mã thực hiện một công thức đệ quy trực tiếp:
54 byte
0%0=1
a%b=sum$map(a%)[0..b-1]++map(b%)[0..a-1]
f n=n%n
Hãy thử trực tuyến!
Sử dụng giải thích di chuyển tân binh của flawr , a%blà số đường dẫn đưa rook từ đó (a,b)đến (0,0), chỉ sử dụng di chuyển giảm tọa độ. Di chuyển đầu tiên giảm ahoặc giảm b, giữ nguyên khác, do đó công thức đệ quy.
49 byte
a?b=sum$map(a%)[0..b-1]
0%0=1
a%b=a?b+b?a
f n=n%n
Hãy thử trực tuyến!
Chúng ta có thể tránh sự lặp lại map(a%)[0..b-1]++map(b%)[0..a-1]bằng cách lưu ý rằng hai nửa giống nhau avà bhoán đổi. Cuộc gọi phụ trợ a?bđếm các đường dẫn nơi di chuyển đầu tiên giảm avà do đó, đếm các đường dẫn b?adi chuyển đầu tiên giảm b. Đây là nói chung khác nhau, và họ thêm vào a%b.
Tổng kết trong a?bcũng có thể được viết như một sự hiểu biết danh sách a?b=sum[a%i|i<-[0..b-1]].
42 byte
0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Hãy thử trực tuyến!
Cuối cùng, chúng tôi thoát khỏi %và chỉ viết đệ quy ?bằng cách thay thế a%ibằng a?i+i?atrong cuộc gọi đệ quy.
Trường hợp cơ sở mới khiến điều này ?mang lại kết quả gấp đôi so với ?phiên bản 49 byte, kể từ đó 0?0=1, chúng ta sẽ có 0%0=0?0+0?0=2. Điều này cho phép sử dụng xác định f n=n?nmà không cần giảm một nửa mà chúng ta cần phải làm.