N-th বেল নম্বর আউটপুট করুন


13

একটি বেল সংখ্যা ( OEIS A000110 ) হ'ল এন লেবেলযুক্ত (স্বতন্ত্র) উপাদানগুলির একটি সেট বিভাজন করার উপায়গুলির সংখ্যা। 0 তম বেল নম্বরটি 1 হিসাবে সংজ্ঞায়িত করা হয়।

আসুন কয়েকটি উদাহরণ দেখুন (আমি পার্টিশনের জন্য সাবসেটগুলি এবং ব্রেসগুলি বোঝাতে ব্র্যাকেট ব্যবহার করি):

1: {1}
2: {[1,2]}, {[1],[2]}
3: {[1,2,3]}, {[1,2],[3]}, {[1,3],[2]}, {[2,3],[1]}, {[1],[2],[3]}

আছে অনেক উপায় বেল সংখ্যার গনা, এবং আপনি তাদের কোন স্বাধীনভাবে ব্যবহার করতে পারেন। একটি উপায় এখানে বর্ণিত হবে:

বেল সংখ্যাগুলি গণনা করার সহজতম উপায় হ'ল দ্বিপদী সহগের জন্য প্যাসকের ত্রিভুজগুলির অনুরূপ একটি সংখ্যা ত্রিভুজ ব্যবহার করা। বেল সংখ্যাগুলি ত্রিভুজটির প্রান্তে উপস্থিত হয়। 1 দিয়ে শুরু করে, ত্রিভুজের প্রতিটি নতুন সারিটি প্রথম প্রবেশের হিসাবে পূর্বের সারিতে সর্বশেষ এন্ট্রি গ্রহণ করে এবং তারপরে বাম প্রতিবেশী প্লাস উপরের বাম প্রতিবেশীর প্রতিটি নতুন এন্ট্রি সেট করে তৈরি করা হয়:

1
1    2
2    3    5
5    7   10   15
15  20   27   37   52

আপনি 0-ইনডেক্সিং বা 1-সূচক ব্যবহার করতে পারেন। আপনি যদি 0-ইনডেক্সিং ব্যবহার করেন তবে একটি ইনপুট 3উচিত আউটপুট 5, তবে 2যদি আপনি 1-ইনডেক্সিং ব্যবহার করেন তবে আউটপুট করা উচিত ।

আপনার প্রোগ্রাম অবশ্যই আউটপুটিং 15 ম বেল নম্বর পর্যন্ত কাজ করা উচিত 1382958545। তত্ত্ব অনুসারে, আপনার প্রোগ্রামটি বৃহত্তর সংখ্যা হ্যান্ডেল করতে সক্ষম হওয়া উচিত (অন্য কথায়, সমাধানগুলি হার্ডকোড করবেন না)। সম্পাদনা: আপনার 0 এর ইনপুট (0-সূচকের জন্য) বা 1 (1-সূচকের জন্য) হ্যান্ডেল করার প্রয়োজন নেই কারণ এটি ত্রিভুজ পদ্ধতি দ্বারা গণনা করা হয়নি।

পরীক্ষার কেস (0-সূচকে ধরে নেওয়া):

0 ->  1 (OPTIONAL)
1 ->  1 
2 ->  2 
3 ->  5 
4 ->  15 
5 ->  52 
6 ->  203 
7 ->  877 
8 ->  4140 
9 ->  21147 
10 -> 115975 
11 -> 678570 
12 -> 4213597 
13 -> 27644437 
14 -> 190899322 
15 -> 1382958545

বিল্ট-ইন পদ্ধতি ব্যবহার করে উত্তরগুলি (যেমন ওল্ফ্রাম ভাষায় বেলবি [এন]) যা সরাসরি বেল সংখ্যা উত্পাদন করে তা আপত্তিহীন হবে।

সংক্ষিপ্ততম কোড (বাইটে) জয়ী।


আপনি যদি 0-ইনডেক্সিং ব্যবহার করেন তবে একটি ইনপুট 3কি আউটপুট দেয়5 এটি আউটপুট হবে 15, তাই না? এবং 1-ইনডেক্সিংয়ের সাথে এটির ফলাফল হবে5
লুইস মেন্ডো

এর পিছনে যুক্তি 0-ইনডেক্সিংয়ে সূচক 0 হিসাবে 0 তম বেল সংখ্যা এবং 1-সূচকে সূচকে 1 হিসাবে গণনা করছিল। আপনার উপায়টি আরও স্পষ্ট হতে পারে তবে বিদ্যমান উত্তরগুলি সেভাবে কাজ করে, তাই এখনই এটি পরিবর্তন করতে পারছি না। আমি শুধু কয়েক ঘন্টা আগে এই সাইটের যোগদান
পাতানো

তবে আপনি বলছেন যে 1-ইনডেক্সিংয়ের সাথে ইনপুট 3আউটপুট করা উচিত 2। তাহলে ইনপুটটি 11-ইনডেক্সিং দিয়ে কী দেবে ?
লুইস মেন্ডো

1 -> 1, 2 -> 1, 3 -> 2 (0 তম, 1 ম এবং 2 য় বেল সংখ্যা অনুসারে) 0 -> 1, 1 -> 1, 2 -> 2 এর বিপরীতে হতে পারে আমি ভুলটি ব্যবহার করছি পরিভাষা
কারচুপি করা হয়েছে

আমি মনে করি এটি পেয়েছি। প্রথম 1টি আপনার উদাহরণ টেবিল এবং আউটপুটটিতে অনুপস্থিত যা আমাকে বিভ্রান্ত করেছে
লুইস মেন্ডো

উত্তর:


2

জেলি , 9 বাইট

ṖµṀcæ.߀‘

এটি সূত্র ব্যবহার করে

সূত্র

যা বন্ধ থাকে যখনই <<2

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

ṖµṀcæ.߀‘  Main link. Argument: n

Ṗ          Pop; yield A := [1, ..., n-1].
 µ         Begin a new, monadic chain with argument A.
  Ṁ        Maximum; yield n-1.
   c       Combinatons; compute (n-1)C(k) for each k in A.
      ߀   Recursively map the main link over A.
    æ.     Take the dot product of the results to both sides.
        ‘  Increment; add 1 to the result.

8

জাভাস্ক্রিপ্ট (ES6), 47 বাইট

f=(n,a=[b=1])=>n--?f(n,[b,...a.map(e=>b+=e)]):b
f=(n,a=[b=1])=>--n?f(n,[b,...a.map(e=>b+=e)]):b

প্রথমটি হল 0-সূচকযুক্ত, দ্বিতীয়টি 1-সূচকযুক্ত।


8

হাস্কেল, 36 বাইট

head.(iterate(last>>=scanl(+))[1]!!)

ত্রিভুজ পদ্ধতিটি ব্যবহার করে, 0, 0-ভিত্তিক সঠিকভাবে পরিচালনা করে।


5

আর , 31 বাইট

sum(gmp::Stirling2.all(scan()))

ব্যবহার স্টারলিং দ্বিতীয় ধরনের সূত্র সংখ্যা এবং যাদের সংখ্যা গণনা করে GMP প্যাকেজ ; স্টিডিন থেকে পড়ে এবং একটি বড় পূর্ণসংখ্যা হিসাবে মানটি প্রদান করে; 0 এর জন্য ব্যর্থ হয়; 1-ইন্ডেক্স।



3

জেলি , 14 12 11 বাইট

ṫ0;⁸+\
1Ç¡Ḣ

এটি অনলাইন চেষ্টা করুন!

জেলির শক্তিশালী পয়েন্টগুলিতে ডাইনামিক ইনপুট¡ দিয়ে ঠিক আঘাত করেনি , সর্বদা অ্যারে সংশোধন করে এবং প্রিপেন্ডিং পরমাণুর অভাব (এক-বাইট ;@বা বিপরীত )।


3

সিজেএম (19 বাইট)

Xa{X\{X+:X}%+}qi*0=

অনলাইন ডেমো

ব্যবচ্ছেদ

Xa         e# Start with an array [1]
{          e# Repeat...
  X\       e#   Put a copy of X under the current row
  {X+:X}%  e#   Map over x in row: push (X+=x)
  +        e#   Prepend that copy of last element of the previous row to get the next row
}
qi*        e# ... input() times
0=         e# Select the first element

3

এমএটিএল , 14 বাইট

:dtEw1Zh1Ze/Yo

ইনপুট 0-ভিত্তিক। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

এটি সূত্র ব্যবহার করে

এখানে চিত্র বর্ণনা লিখুন

যেখানে p F q ( a 1 , ..., a p ; b 1 , ..., b q ; x ) হ'ল হাইপারজেমেট্রিক ফাংশন

:      % Implictly input n. Push array [1 2 ... n]
d      % Consecutive differences: array [1 ... 1] (n-1 entries)
tE     % Duplicate, multiply by 2: array [2 ... 2] (n-1 entries)
w      % Swap
1      % Push 1
Zh     % Hypergeometric function
1Ze    % Push number e
/      % Divide
Yo     % Round (to prevent numerical precision issues). Implicitly display

3

পাইথন , 42 বাইট

f=lambda n,k=0:n<1or k*f(n-1,k)+f(n-1,k+1)

এটি অনলাইন চেষ্টা করুন!

পুনরাবৃত্তির সূত্রটি nপার্টিশনে উপাদান রাখার থেকে আসে । পরিবর্তে প্রতিটি উপাদান জন্য, আমরা স্থির করব কিনা তা স্থির করে:

  • একটি বিদ্যমান পার্টিশনে, যার মধ্যে kপছন্দ রয়েছে
  • একটি নতুন পার্টিশন শুরু করতে, যা kভবিষ্যতের উপাদানগুলির জন্য পছন্দগুলির সংখ্যা বাড়িয়ে তোলে

যে কোনও উপায়ে রাখার nমতো উপাদানগুলির অবশিষ্ট সংখ্যা হ্রাস পায় । সুতরাং, আমরা রিকার্সিভ সূত্র আছে f(n,k)=k*f(n-1,k)+f(n-1,k+1)এবং f(0,k)=1সঙ্গে, f(n,0)n- তম বেল সংখ্যা।


2

পাইথন 2 , 91 বাইট

s=lambda n,k:n*k and k*s(n-1,k)+s(n-1,k-1)or n==k
B=lambda n:sum(s(n,k)for k in range(n+1))

এটি অনলাইন চেষ্টা করুন!

বি (এন) দ্বিতীয় ধরণের স্ট্র্লিং সংখ্যার যোগফল হিসাবে গণনা করা হয়।


এটি একটি দুর্দান্ত সমাধান। লক্ষ্য করুন একটি দ্বিতীয় ধরনের স্টারলিং সংখ্যার জন্য নির্মিত ব্যবহার বেল সংখ্যার গনা (ম্যাথামেটিকাল বা অনুরূপ ব্যবহার করা হয় তবে) অনুমতি দেওয়া হবে
পাতানো

আপনি সংজ্ঞা দুটিতে সরাসরি দুটি বাইট সংরক্ষণ করতে পারেন s: যেহেতু পুনরাবৃত্তিকারী কলগুলি সর্বদা হ্রাস পায় nএবং kআপনার দ্বারা কোনও বিভাজন নেই *kপ্রথম মেয়াদে এটি হারাতে পারে ।
পিটার টেলর

অথবা আপনি পুরো সারিগুলিতে কাজ করে একটি ল্যাম্বডায় ফ্ল্যাট করে একগুচ্ছ বাঁচাতে পারেন:B=lambda n,r=[1,0]:n and B(n-1,[k*r[k]+r[k-1]for k in range(len(r))]+[0])or sum(r)
পিটার টেলর

যেহেতু আপনার ফাংশনটি Bপুনরাবৃত্তিযোগ্য নয় এবং এটিই আপনার চূড়ান্ত উত্তর, আপনি 2 বাইট সংরক্ষণেরB= জন্য বাদ দিতে পারেন
ফিলিপ নার্দি বাতিস্তা

2

ম্যাটল্যাব, 128 103 বাইট

function q(z)
r(1,1)=1;for x=2:z
r(x,1)=r(x-1,x-1);for y=2:x
r(x,y)=r(x,y-1)+r(x-1,y-1);end
end
r(z,z)

খুব স্ব স্ব বর্ণনাকারী। একটি রেখার শেষে একটি সেমিকোলন ছাড়াই ফলাফল মুদ্রণ করে।

25 বাইট সংরক্ষণ করেছেন লুইস মেন্ডোকে ধন্যবাদ।




2

ওহম , 15 বাইট

2°M^┼ⁿ^!/Σ;αê/≈

এটি অনলাইন চেষ্টা করুন!

ব্যবহার Dobinski এর forumla (এমনকি বি (0) জন্য কাজ করে Yay )।

ব্যাখ্যা

2°M^┼ⁿ^!/Σ;αê/≈
2°        ;     # Push 100
  M             # Do 100 times...
   ^             # Push index of current iteration
    ┼ⁿ           # Take that to the power of the user input
      ^!         # Push index factorial
        /        # Divide
         Σ       # Sum stack together
           αê   # Push e (2.718...)
             /  # Divide
              ≈ # Round to nearest integer (Srsly why doesn't 05AB1E have this???)

2

পাইথন (by৯ বাইট)

B=lambda n,r=[1]:n and B(n-1,[r[-1]+sum(r[:i])for i in range(len(r)+1)])or r[0]

পাইথন 2 এ অনলাইন ডেমো , তবে এটি পাইথন 3 তেও কাজ করে।

এটি গোল্ফযুক্ত লুপের জন্য পুনরাবৃত্ত ল্যাম্বডা ব্যবহার করে আইটকের ত্রিভুজটি তৈরি করে।



1

জে, 17 বাইট

0{]_1&({+/\@,])1:

ত্রিভুজ গণনা পদ্ধতি ব্যবহার করে।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

0{]_1&({+/\@,])1:  Input: integer n
               1:  The constant 1
  ]                Identity function, get n
   _1&(       )    Call this verb with a fixed left argument of -1 n times
                   on itself starting with a right argument [1]
             ]       Get right argument
       {             Select at index -1 (the last item)
            ,        Join
        +/\@         Find the cumulative sums
0{                 Select at index 0 (the first item)

1

পাইথন 3 , 78 বাইট

from math import*
f=lambda n:ceil(sum(k**n/e/factorial(k)for k in range(2*n)))

আমি চেষ্টা করেছি এবং গণনার জন্য একটি পৃথক রুট যাব। এটি ডবিনস্কির সূত্র ব্যবহার করে, 0-সূচকযুক্ত, 0 এর জন্য কাজ করে না।

এটি অনলাইন চেষ্টা করুন!


1
আপনার ফাংশনটি fপুনরাবৃত্ত না হওয়ার কারণে, আপনি বাদ দিতে পারেন f=এবং 2 বাইট সংরক্ষণ
ফিলিপ নার্দি বাতিস্তা

1

পাইথন 3 , 68 60 বাইট

ত্রিভুজটির সহজ পুনরাবৃত্তি নির্মাণ, তবে এটি ব্যবহারিক উদ্দেশ্যে কার্যকরভাবে অকার্যকর। 15 তম বেল সংখ্যা গণনা করার কারণে টিআইও সময়োপযোগী হয় তবে এটি আমার মেশিনে কাজ করে।

এটি 1-ইনডেক্সিং Trueব্যবহার করে এবং 1 এর পরিবর্তে ফিরে আসে ।

f=lambda r,c=0:r<1or c<1and f(r-1,r-1)or f(r-1,c-1)+f(r,c-1)

এটি অনলাইন চেষ্টা করুন!


8 বাইট সংরক্ষণের জন্য @ ফিলিপনার্ডিবাটিস্টাকে ধন্যবাদ!


60 বাইট । সংখ্যার পরিবর্তে (0,1) বুলিয়ান ফিরানো পাইথনে গ্রহণযোগ্য
ফিলিপ নার্দি বাতিস্তা

1

পিএইচপি , 72 বাইট

রিকার্সিভ ফাংশন 1-ইনডেক্সড

function f($r,$c=0){return$r?$c?f($r-1,$c-1)+f($r,$c-1):f($r-1,$r-2):1;}

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 86 বাইট

0-ইন্ডেক্স

for(;$r++<$argn;)for($c=~0;++$c<$r;)$l=$t[$r][$c]=$c?$l+$t[$r-1][$c-1]:($l?:1);echo$l;

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 89 বাইট

রিকার্সিভ ফাংশন 0-ইনডেক্সড

function f($r,$s=NULL){$c=$s??$r-1;return$r>1?$c?f($r-1,$c-1)+f($r,$c-1):f($r-1,$r-2):1;}

এটি অনলাইন চেষ্টা করুন!


1

এলিস , 22 বাইট

/oi
\1@/t&wq]&w.q,+k2:

এটি অনলাইন চেষ্টা করুন!

এটি ত্রিভুজ পদ্ধতিটি ব্যবহার করে। N = 0 এর জন্য, এটি পরিবর্তে বি (1) গণনা করে, যা সুবিধাজনকভাবে বি (0) এর সমান।

ব্যাখ্যা

এটি সেই প্রোগ্রামগুলির জন্য একটি স্ট্যান্ডার্ড টেম্পলেট যা অর্ডিনাল মোডে ইনপুট নেয়, একে কার্ডিনাল মোডে প্রসেস করে এবং ফলাফলটি অর্ডিনাল মোডে আউটপুট দেয়। একজন1এটিকে ইনপুটের নীচে স্ট্যাকের উপরে রাখার জন্য টেমপ্লেটে করা হয়েছে।

প্রোগ্রামটি ত্রিভুজের প্রতিটি সারি গণনা করার জন্য স্ট্যাকটিকে প্রসারিত বিজ্ঞপ্তি সারি হিসাবে ব্যবহার করে। প্রথমটির প্রতিটি পুনরাবৃত্তির সময়, স্ট্যাকের নীচে একটি অন্তর্ভুক্ত শূন্য একটি সুস্পষ্ট শূন্য হয়ে যায় becomes

1     Append 1 to the implicit empty string on top of the stack
i     Get input n
t&w   Repeat outer loop that many times (push return address n-1 times)
q     Get tape position (initially zero)
]     Move right on tape
&w    On iteration k, push this return address k-1 times
      The following inner loop is run once for each entry in the next row
.     Duplicate top of stack (the last number calculated so far)
q,    Move the entry k spaces down to the top of the stack: this is the appropriate entry
      in the previous row, or (usually) an implicit zero if we're in the first column
+     Add these two numbers
k     Return to pushed address: this statement serves as the end of two loops simultaneously
2:    Divide by two: see below
o     Output as string
@     Terminate

প্রথম পুনরাবৃত্তি কার্যকরভাবে স্ট্যাকের শীর্ষে প্রয়োজনীয় 1 সত্ত্বেও শূন্যের প্রাথমিক স্ট্যাক গভীরতা ধরে নেয়। ফলস্বরূপ, 1 টি নিজের সাথে যুক্ত হয়ে শেষ হয় এবং পুরো ত্রিভুজটি 2 দিয়ে গুণিত হয় the চূড়ান্ত ফলাফলকে 2 দ্বারা ভাগ করে সঠিক উত্তর দেয়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.