সিজেএম (69 বাইট)
]qi:X,{1e|,:):N{N\f{1$%!*}W$.*:+}%1$W%.*:+N,/+}/W\+_1,*X=\_W%.*:+-Y/z
অনলাইন ডেমো
ব্যাখ্যা
মূল ধারণাটি ওআইএস-এ বর্ণিত জেনারেটিং ফাংশনটি বাস্তবায়ন করা। ইনপুট একটি বাজে বিশেষ কেস, তবে আমি যে চূড়ান্ত টুইটগুলি করেছি তা উত্পাদনের সমাপ্ত হয়েছিল - সেই মামলার জন্য 1 , সুতরাং জেড (পরম মানের জন্য) এটি পরিপাটি করে। এটাই এখানে সবচেয়ে অদ্ভুত কৌশল।0- 1z- র
.*:+
তিনবার পুনরাবৃত্তি করা হয়, এবং দেখে মনে হচ্ছে এটি নিষ্ক্রিয় হিসাবে কোনও বাইট সংরক্ষণ করতে পারে {.*:+}:F~
। যাইহোক, এটি বিশেষ কেস সাথে বিরতি দেয় কারণ এটি বাহ্যিক লুপটি মোটেই কার্যকর করে না।0
আমরা A000081 এর জন্য সহায়ক উত্পাদক ফাংশনটি ব্যবহার করি , যার পদগুলির পুনরাবৃত্তি রয়েছে
a[0] = 0
a[1] = 1
For n >= 1, a[n+1] = (sum_{k=1}^n a[n-k+1] * sum_{d|k} d * a[d]) / n
আমি রুপান্তর নিশ্চিত কিছু কিছু ভাষায় বিল্ট-ইন আছে আছি Möbius বিপরীত জন্য কিন্তু CJam না; আমি যে সেরা পদ্ধতির সন্ধান পেয়েছি তা হ'ল একটি অ্যারে ম্যাপিং ডি তৈরি করা এবং তারপরে একটি ব্যবহারের সাথে পয়েন্টওয়াইজ গুণ করা । নোট করুন যে এখানে সূচক 1 এ একটি সূচনা তৈরি করা সুবিধাজনক , কারণ ওজনগুলি সেট আপ করার সময় আমরা শূন্য দ্বারা বিভাগ এড়াতে চাই। এটিও নোট করুন যে পয়েন্টওয়াইজ অপারেশনে সরবরাহ করা দুটি অ্যারে যদি একই দৈর্ঘ্য না হয় তবে লম্বা থেকে মানগুলি কোনও ছোঁয়া যায় না: সুতরাং আমাদের হয় প্রথম k এর শর্তাদি গ্রহণ করতে হবেΣঘ∣ কেঘ× ক [ d]ঘk % d == 0 ? d : 0
একটি.*
একটিট বা ওজনের অ্যারে এন পর্যন্ত যেতে। পরেরটি সংক্ষিপ্ত বলে মনে হচ্ছে। সুতরাং এই বিপরীত Möbius জন্য অ্যাকাউন্ট রূপান্তরএকটিএনN\f{1$%!*}W$.*:+
যদি আমরা বিপরীত Möbius রূপান্তরের ফলাফলকে কল করি তবে M
আমাদের এখন
a [ n + 1 ] = 1এনΣকে = 1এনa [ n - k + 1 ] × এম[ কে ]
অঙ্কটি স্পষ্টতই একটি রূপান্তর থেকে একটি শব্দ, সুতরাং আমরা এটি এম বা এর অনুলিপি বিপরীত করে এবং তারপরে বিন্দুবৃত্তীয় গুণন এবং যোগফলের মাধ্যমে এটি পরিচালনা করতে পারি । আবার, আমাদের সূচি থেকে পরিবর্তিত হয় 1 থেকে এন , এবং উপরন্তু আমরা সূচকের যা সমষ্টি আপ পেয়ার করতে চান এন + + 1 , তাই এটি সূচক আবার সুবিধাজনক একটি আমরা এখন জন্য দায়ী থাকেন 1 বদলে 0. থেকেএকটিএম1এনn + 1একটি
qi:X,{ ,:):N{N\f{1$%!*}W$.*:+}%1$W%.*:+N,/+}/
সহায়ক উত্পাদনের ক্রিয়াটির বিন্দু A000055 সূত্র বিভাগ দ্বারা দেওয়া হয়েছে:
G.f.: A(x) = 1 + T(x) - T^2(x)/2 + T(x^2)/2,
where T(x) = x + x^2 + 2*x^3 + ... is the g.f. for A000081.
নিরিখে , এর মানে হল আউটপুট আমরা চাইতে যে [ X = 0 ] + + একটি [ X ] + + 1একটি
[ x = 0 ] + এ [ এক্স ] + 12( a [ x / 2 ] - ∑i = 0এনa [ i ] × a [ n - i ] )
একটি [ এক্স / ২ ]এক্স1,*
X=
0\+
a [ 0 ] = 0এক্স= 0W\+
- 2 ক [ এক্স ] + ∑এনi = 0একটি [ i ] × a [ n - i ]2একটি [ এক্স ]
সুতরাং আমরা ব্যাখ্যা করেছি
qi:X,{ ,:):N{N\f{1$%!*}W$.*:+}%1$W%.*:+N,/+}/W\+_1,*X=\_W%.*:+-Y/
1]
এন= 1
1]qi:X,1>{ ... }/
এক্স= 0একটি[-1 1]
0[ x = 0 ]X!+
1e|
একটি1এন= 0
]qi:X,{ ... /+}/
স্পষ্টতই শূন্য দ্বারা বিভাগ দেয়। তবে আমরা যদি চেষ্টা করি
]qi:X,{1e| ... /+}/
তারপর এটি কাজ করে। আমরা পেতে
e# Stack: [] 0
1e| e# Stack: [] 1
,:):N e# Stack: [] [1]
{ e# We only execute this loop once
N\f{1$%!*} e# 1 divides 1, so stack: [] [1]
W$.* e# Remember: if the two arrays supplied to the pointwise operation
e# are not the same length then the values from the longer one are
e# left untouched. Stack: [] [1]
:+ e# Fold over a singleton. Stack: [] 1
}% e# And that was a map, so stack: [] [1]
1$W%.*:+ e# Another [1] [] .*:+, giving the same result: 1
N,/ e# 1 / 1 = 1
+ e# And we append 1 to a giving [1]
যা আমাদের প্রয়োজনীয় মূল্য ঠিক উত্পাদন করে।
এক্স= 0- 1[-1]
( - 1 - 12( - 1 × - 1 ) ) = - 101- 11z