0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Çevrimiçi deneyin!
2'den fazla değişkeni geri alan oldukça doğrudan bir uygulama.
Bu çözümü nasıl elde edebileceğimiz aşağıda açıklanmıştır. Doğrudan özyinelemeli formül uygulayan kodla başlayın:
54 bayt
0%0=1
a%b=sum$map(a%)[0..b-1]++map(b%)[0..a-1]
f n=n%n
Çevrimiçi deneyin!
Kullanılması flawr en kale hareket yorumunu , a%bgelen kalesini almak yolların sayısıdır (a,b)için (0,0)kullanarak, sadece bir koordinat azalma taşır. İlk hareket azalır aveya azalır b, diğeri aynı kalır, böylece özyinelemeli formül.
49 bayt
a?b=sum$map(a%)[0..b-1]
0%0=1
a%b=a?b+b?a
f n=n%n
Çevrimiçi deneyin!
map(a%)[0..b-1]++map(b%)[0..a-1]İki yarının aynı olduğunu ave bdeğiştirildiğini belirterek tekrardan kaçınabiliriz . Yardımcı çağrı a?bilk hareketin azaldığı yolları sayar ave böylece ilk hareketin azaldığı yolları b?asayar b. Bunlar genel olarak farklıdır ve eklerler a%b.
Özetleme, a?bliste kavrayışı olarak da yazılabilir a?b=sum[a%i|i<-[0..b-1]].
42 bayt
0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
Çevrimiçi deneyin!
Son olarak, biz kurtulmak %ve sadece açısından özyinelemeye yazma ?değiştirerek a%iile a?i+i?aözyinelemeli arama.
Yeni temel durum , bunun 49 baytlık versiyonun ?iki katı çıkış vermesine neden oluyor ?, çünkü sahip 0?0=1olacağız 0%0=0?0+0?0=2. Bu, tanımlamayı f n=n?nbaşka yapmamız gereken yarıya olmadan kullanalım .