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%b
gelen 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 a
veya 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 a
ve b
değiştirildiğini belirterek tekrardan kaçınabiliriz . Yardımcı çağrı a?b
ilk hareketin azaldığı yolları sayar a
ve böylece ilk hareketin azaldığı yolları b?a
sayar b
. Bunlar genel olarak farklıdır ve eklerler a%b
.
Özetleme, a?b
liste 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%i
ile a?i+i?a
özyinelemeli arama.
Yeni temel durum , bunun 49 baytlık versiyonun ?
iki katı çıkış vermesine neden oluyor ?
, çünkü sahip 0?0=1
olacağız 0%0=0?0+0?0=2
. Bu, tanımlamayı f n=n?n
başka yapmamız gereken yarıya olmadan kullanalım .