Scala: 110
type B=BigInt
def r(a:B,b:B,f:(B,B)=>B):B=if(b>1)f(a,r(a,b-1,f))else a
def h(a:B,b:B)=r(a,b,r(_,_,r(_,_,(_+_))))
ungolfed:
type B=BigInt
def recursive (a:B, b:B, f:(B,B)=>B): B =
if (b>1) f (a, recursive (a, b-1, f))
else a
recursive (2, 3, recursive (_, _, recursive (_, _, (_ + _))))
ব্যাখ্যা:
type B=BigInt
def p (a:B, b:B):B = a+b
def m (a:B, b:B):B = if (b>1) p (a, m (a, b-1)) else a
def h (a:B, b:B):B = if (b>1) m (a, h (a, b-1)) else a
def t (a:B, b:B):B = if (b>1) h (a, t (a, b-1)) else a
প্লাস, মুল, উচ্চ (: = পাউ), টিট্রেশন সমস্ত একই পদ্ধতিতে কাজ করে। সাধারণ প্যাটার্নটি রিকার্সিভ পদ্ধতি হিসাবে উত্তোলন করা যেতে পারে, যা দুটি বিগআইএন্ট এবং একটি মৌলিক ফাংশন নেয়:
def r (a:B, b:B, f:(B,B)=>B):B =
if (b>1) f(a, r(a, b-1, f)) else a
r (4, 3, r (_,_, r(_,_, (_+_))))
আন্ডারলাইনগুলি এমন কোনও কিছুর জন্য স্থানধারক যা এই ক্রমটিতে ডাকা হয়, উদাহরণস্বরূপ সংযোজন প্লাস (a, b) = (a + b); সুতরাং ( + ) একটি ফাংশন যা দুটি আর্গুমেন্ট নেয় এবং এগুলিকে যুক্ত করে (এ + বি)।
দুর্ভাগ্যক্রমে, আমি স্ট্যাকের আকার নিয়ে সমস্যাগুলি পাই। এটি 4 টির জন্য ছোট মানগুলির জন্য কাজ করে (উদাহরণস্বরূপ: 2) বা যদি আমি এক ধাপের জন্য গভীরতা হ্রাস করি:
def h(a:B,b:B)=r(a,b,r(_,_,(_*_))) // size -7, penalty + 5
def h(a:B,b:B)=r(a,b,r(_,_,r(_,_,(_+_))))
মূল কোডটি 112 টি অক্ষর এবং যদি এটির মান হয় তবে এটি 107 হয় Maybe
প্রসারিত অ্যালগরিদমটি টেলরেকারসিভ কলগুলিতে রূপান্তরিত হতে পারে:
type B=BigInt
def p(a:B,b:B):B=a+b
import annotation._
@tailrec
def m(a:B,b:B,c:B=0):B=if(b>0)m(a,b-1,p(a,c))else c
@tailrec
def h(a:B,b:B,c:B=1):B=if(b>0)h(a,b-1,m(a,c))else c
@tailrec
def t(a:B,b:B,c:B=1):B=if(b>0)t(a,b-1,h(a,c))else c
মূল পদ্ধতিটি তুলনামূলক কলটি দীর্ঘতর, তবে দীর্ঘ সংস্করণে স্ট্যাকওভারফ্লো উত্থাপন করেনি - তবে এটি যুক্তিসঙ্গত সময়ের ফল দেয় না। t (2,4) ঠিক আছে, তবে t (3,3) ইতিমধ্যে 5 মিনিটের পরে আমার দ্বারা থামানো হয়েছিল। তবে এটি খুব মার্জিত, তাই না?
// 124 = 119-5 bonus
type B=BigInt
def r(a:B,b:B,c:B,f:(B,B)=>B):B=if(b>0)r(a,b-1,f(a,c),f)else c
def t(a:B,b:B)=r(a,b,1,r(_,_,1,r(_,_,0,(_+_))))
এবং এখন উপরের মত একই: দুর্গন্ধযুক্ত গুণটি ব্যবহার করুন (5 এর বোনাস প্রত্যাখ্যান করার পরেও আমরা লাভ করি, কারণ আমরা 7 টি অক্ষর সংরক্ষণ করি: win = 4 অক্ষর :)
// 115 without bonus
type B=BigInt
def r(a:B,b:B,c:B,f:(B,B)=>B):B=if(b>0)r(a,b-1,f(a,c),f)else c
def t(a:B,b:B)=r(a,b,1,r(_,_,1,(_*_)))
আবাহন:
timed ("t(4,3)")(t(4,3))
t(4,3): 1
scala> t(4,3)
res89: B = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
রানটাইম: 1 এমএস।
*
কিছু প্রসঙ্গে গুণ করা যায় তবে এটি সাধারণ লুপিং অপারেটর:{block}N*
সি-স্টাইলের সমতুল্যfor(i=0;i<N;i++){block}
। জটিল প্রান্তের কেসটি স্ট্রিং / অ্যারের গুণক ('a'3*
দেয়'aaa'
), তবে এটির একটি সমস্যা হওয়ার সম্ভাবনা কম4***3
।