0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
इसे ऑनलाइन आज़माएं!
एक सीधा सीधा कार्यान्वयन जो 2 चर पर पुनरावृत्ति करता है।
यहाँ हम इस समाधान को कैसे प्राप्त कर सकते हैं। प्रत्यक्ष पुनरावर्ती सूत्र को लागू करने वाले कोड से शुरू करें:
54 बाइट्स
0%0=1
a%b=sum$map(a%)[0..b-1]++map(b%)[0..a-1]
f n=n%n
इसे ऑनलाइन आज़माएं!
का उपयोग करते हुए flawr की किश्ती व्याख्या , a%b
रास्तों से किश्ती प्राप्त की संख्या है (a,b)
करने के लिए (0,0)
, का उपयोग करते हुए केवल कमी एक समन्वय ले जाता है। पहला कदम या तो घटता है a
या घटता है b
, दूसरे को समान रखता है, इसलिए पुनरावर्ती सूत्र।
49 बाइट्स
a?b=sum$map(a%)[0..b-1]
0%0=1
a%b=a?b+b?a
f n=n%n
इसे ऑनलाइन आज़माएं!
हम दोहराए जाने से बच सकते हैं map(a%)[0..b-1]++map(b%)[0..a-1]
कि दो हिस्सों के साथ समान हैं a
और b
स्वैप किए गए हैं। सहायक कॉल a?b
उन रास्तों को गिनाता है जहां पहली चाल घटती है a
, और इसलिए b?a
उन स्थानों को गिना जाता है जहां पहली चाल घटती है b
। ये सामान्य रूप से अलग हैं, और वे इसमें जोड़ते हैं a%b
।
में सम्मिलन को a?b
सूची बोध के रूप में भी लिखा जा सकता है a?b=sum[a%i|i<-[0..b-1]]
।
42 बाइट्स
0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n
इसे ऑनलाइन आज़माएं!
अंत में, हम छुटकारा पा लेते हैं %
और बस के साथ ?
बदलकर पुनरावृत्ति लिखते हैंa%i
a?i+i?a
पुनरावर्ती कॉल के ।
नए बेस केस के कारण 49-बाइट संस्करण में ?
आउटपुट को दोगुना करने का मौका मिलता है ?
, तब से 0?0=1
, हमारे पास होगा 0%0=0?0+0?0=2
। यह उपयोग को f n=n?n
बिना रुके परिभाषित करने देता है जिसे हमें करने की आवश्यकता होगी।