0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Cobalah online!
Implementasi yang cukup langsung yang berulang lebih dari 2 variabel.
Inilah cara kami mendapatkan solusi ini. Mulai dengan kode yang menerapkan formula rekursif langsung:
54 byte
0%0=1
a%b=sum$map(a%)[0..b-1]++map(b%)[0..a-1]
f n=n%n
Cobalah online!
Menggunakan interpretasi benteng bergerak flawr ini , a%b
adalah jumlah jalur yang mendapatkan benteng dari (a,b)
ke (0,0)
, menggunakan hanya bergerak penurunan koordinat. Langkah pertama mengurangi a
atau mengurangi b
, menjaga yang lain sama, maka rumus rekursif.
49 byte
a?b=sum$map(a%)[0..b-1]
0%0=1
a%b=a?b+b?a
f n=n%n
Cobalah online!
Kita dapat menghindari pengulangan map(a%)[0..b-1]++map(b%)[0..a-1]
dengan memperhatikan bahwa kedua bagiannya sama a
dan b
bertukar. Panggilan tambahan a?b
menghitung jalur di mana langkah pertama menurun a
, dan b?a
menghitung jalur di mana langkah pertama berkurang b
. Ini pada umumnya berbeda, dan mereka menambah a%b
.
Penjumlahan dalam a?b
juga dapat ditulis sebagai daftar pemahaman 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
Cobalah online!
Akhirnya, kita menyingkirkan %
dan hanya menulis rekursi dalam hal ?
dengan mengganti a%i
dengan a?i+i?a
panggilan rekursif.
Basis kasus baru menyebabkan ini ?
untuk memberikan output dua kali lipat dari ?
pada versi 49-byte, karena dengan 0?0=1
, kita akan melakukannya 0%0=0?0+0?0=2
. Ini memungkinkan penggunaan define f n=n?n
tanpa mengurangi separuh yang harus kita lakukan.