সংযুক্তিযুক্ত! সংযুক্তিবিদ: সাবফ্যাক্টোরিয়াল গণনা করুন


25

Subfactorial বা rencontres সংখ্যার ( A000166 ) গৌণিক সংখ্যা যা একাধিক বিন্যাসন সংযুক্তকারিতা দেখা অনুরূপ সংখ্যার একটি ক্রম। বিশেষ করে এন ম subfactorial ! এন সংখ্যা দেয় derangements হয় একটি সেটের এন উপাদান। একটি হতাশ একটি হ'ল আদেশ যা কোনও উপাদান একই অবস্থানে থাকে না। সাবফ্যাক্টরিয়ালটি নিম্নলিখিত পুনরাবৃত্ত সম্পর্কের মাধ্যমে সংজ্ঞায়িত করা যেতে পারে:

!n = (n-1) (!(n-1) + !(n-2))

প্রকৃতপক্ষে, একই পুনরাবৃত্তি সম্পর্কটি ফ্যাক্টরিয়ালটির জন্য ধারণ করে তবে সাবফ্যাক্টরিয়ালটির জন্য আমরা শুরু করি:

!0 = 1
!1 = 0

(ফ্যাক্টরিয়ালটির জন্য আমাদের অবশ্যই অবশ্যই 1! = 1 ছিল ))

আপনার টাস্কটি গণনা করা ! এন , দেওয়া এন

বিধি

ফ্যাক্টরিয়াল মত, সাবফ্যাক্টরিয়াল খুব দ্রুত বৃদ্ধি পায়। যদি আপনার প্রোগ্রামটি শুধুমাত্র ইনপুট সব ব্যবস্থা করতে সক্ষম এটা জরিমানা এন যেমন যে ! এন আপনার ভাষা এর নেটিভ সংখ্যা টাইপ দ্বারা প্রতিনিধিত্ব করা যেতে পারে। যাইহোক, আপনার অ্যালগরিদম তত্ত্বীয়ভাবে স্বেচ্ছাচারী n এর জন্য কাজ করতে হবে । এর অর্থ, আপনি ধরে নিতে পারেন যে অবিচ্ছেদ্য ফলাফল এবং মধ্যবর্তী মানটি ঠিক আপনার ভাষা দ্বারা উপস্থাপিত হতে পারে। দ্রষ্টব্য যে এটি স্থির বাদ দেয় না যদি এটি সঞ্চিত থাকে বা সীমাবদ্ধ নির্ভুলতার সাথে গণনা করা হয়।

ফলাফলটি একটি সঠিক পূর্ণসংখ্যার হতে হবে (বিশেষত, আপনি বৈজ্ঞানিক স্বরলিপি দিয়ে ফলাফলটি অনুমান করতে পারবেন না)।

আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং ইনপুট গ্রহণ এবং আউটপুট সরবরাহের মানক পদ্ধতির কোনও ব্যবহার করতে পারেন ।

আপনি যে কোনও প্রোগ্রামিং ভাষা ব্যবহার করতে পারেন , তবে লক্ষ্য করুন যে এই ফাঁকগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়েছে।

এটি , তাই সংক্ষিপ্ততম বৈধ উত্তর - বাইটগুলিতে মাপা - জয় w

পরীক্ষার মামলা

n     !n
0     1
1     0
2     1
3     2
4     9
5     44
6     265
10    1334961
12    176214841
13    2290792932
14    32071101049
20    895014631192902121
21    18795307255050944540
100   34332795984163804765195977526776142032365783805375784983543400282685180793327632432791396429850988990237345920155783984828001486412574060553756854137069878601

উত্তর:


19

ফানসিটন , 336 বাইট

বাইট গণনাটি বিওএম-এর সাথে ইউটিএফ -16 এনকোডিং অনুমান করে।

┌─╖┌─╖  ┌─╖ 
│f╟┤♭╟┐┌┤♭╟┐
╘╤╝╘═╝├┘╘═╝├────┐
 │┌─╖ │ ┌┐┌┘╔═╗╓┴╖
 ││f╟─┴┐└┴┼─╢0║║f║
 │╘╤╝  │  │ ╚═╝╙─╜
 │┌┴╖ ┌┴╖┌┴╖ ╔═╗
 ││+╟┐│×╟┤?╟┐║1║
 │╘╤╝│╘╤╝╘╤╝┘╚╤╝
 └─┘ └─┘  └───┘

এটি এমন একটি ফাংশন সংজ্ঞায়িত করে fযা একটি পূর্ণসংখ্যা নেয় এবং 90 ডিগ্রি বাঁদিকে বাঁক দিয়ে অন্য পূর্ণসংখ্যাকে আউটপুট দেয়। এটি নির্বিচারে বড় ইনপুটগুলির জন্য কাজ করে।

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

এটি ফানসিটন বিবেচনা করে এটি এমনকি যুক্তিসঙ্গতভাবে দ্রুত হয় (এন = 20 টিআইওতে প্রায় 14 সেকেন্ড সময় নেয়)। মূল মন্দাটি দ্বৈত পুনরাবৃত্তি থেকে আসে, কারণ আমি মনে করি না যে ফানসিটনের দোভাষীটি স্বয়ংক্রিয়ভাবে ফাংশনগুলি স্মরণ করে।

দুর্ভাগ্যক্রমে, কিছু মনসপ্যাসেড ফন্টগুলি সঠিকভাবে এক / এবং লাইনগুলির মধ্যে ছোট ফাঁকগুলি সন্নিবেশ করে না। টিআইওর সমস্ত সৌন্দর্যে কোডের একটি স্ক্রিনশট এখানে:

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

আমার মনে হয় এটা গল্ফ সম্ভব হতে পারে এই আরো কিছু যেমন থেকে শর্ত পরিবর্তন করে >0করতে <1এবং শর্তাধীন শাখা সোয়াপিং, যাতে আমি একটি সম্পূর্ণ ভিন্ন সূত্র ব্যবহার করে হয়তো সংখ্যা আক্ষরিক পুনরায় ব্যবহার করতে পারে, বা, কিন্তু আমি বেশ আছি ইতিমধ্যে এটি কতটা কমপ্যাক্ট তা নিয়ে খুশি।

ব্যাখ্যা

এটি মূলত চ্যালেঞ্জে প্রদত্ত পুনরাবৃত্তি কার্যকর করে, যদিও এটি বেস কেসটি ব্যবহার করে ! (- 1) =! 0 = 1n-1 এবং n-2 পূর্ববর্তী ক্রিয়াকলাপের সাথে গণনা করা হয় , এবং মধ্যবর্তী ফলাফল n-1 তিনটি জায়গায় পুনরায় ব্যবহার করা হয়। এটির বেশি কিছু নেই, তাই আমি খুব শীঘ্রই নিয়ন্ত্রণ প্রবাহের মধ্য দিয়ে যাব:

               ─┐
               ╓┴╖
               ║f║
               ╙─╜

এটি ফাংশন শিরোনাম যা ফাংশনের ইনপুট এন সংযুক্ত রেখা দীর্ঘ দীর্ঘায়িত করে। এটি তাত্ক্ষণিকভাবে টি-জংশনে পৌঁছেছে, যা কেবলমাত্র মানটির নকল করে।

        ┌┐┌┘╔═╗
        └┴┼─╢0║
          │ ╚═╝

0বক্স মাত্র একটি সাংখ্যিক আক্ষরিক হয়। একটি 4-ওয়ে জংশন দুটি ফাংশন গণনা করে: যে পথটি নীচে গণনা 0 <এন থেকে বেরিয়ে যায় , যা আমরা বেস কেস নির্ধারণ করতে ব্যবহার করব। যে পথটি পৃথকভাবে বামে চলে যায় তা 0 << n (একটি বাম শিফট) গণনা করে তবে আমরা স্টারকভ কনস্ট্রাক্টের সাহায্যে এই মানটিকে বাতিল করে দিই ।

         ┌┴╖ ╔═╗
         ┤?╟┐║1║
         ╘╤╝┘╚╤╝
          └───┘

আমরা এটিকে ত্রিমুখী শর্তসাপেক্ষে নিয়ে যাই ?। মানটি যদি মিথ্যা হয় তবে আমরা ধ্রুবক ফলাফলটি ফিরিয়ে দেব 1। এর আলগা প্রান্তটি ?হ'ল ফাংশন আউটপুট। আমি এটিকে এখানে 180 ডিগ্রি দিয়ে ঘুরিয়ে দিচ্ছি, যাতে fপ্রোগ্রামের বাকী অংশে ইনপুট এবং আউটপুট সম্পর্কিত আপেক্ষিক দিকটি আরও সুবিধাজনক হয়।

শর্তটি যদি সত্য হয় তবে অন্য মানটি ব্যবহার করা হবে। আসুন সেই পথটি দেখুন যা এই শাখার দিকে নিয়ে যায়। (দ্রষ্টব্য যে ফানসিটনের মূল্যায়ন আসলেই অলস যাতে এই শাখার প্রয়োজন না হলে কখনও মূল্যায়ন করা যায় না, যা প্রথম স্থানে পুনরাবৃত্তিকে সম্ভব করে তোলে))

        ┌─╖ 
      ┐┌┤♭╟┐
      ├┘╘═╝
      │
     ─┴┐

অন্যান্য শাখায় আমরা প্রথমে এন -1 গণনা করি এবং তারপরে দু'বার পথটি বিভক্ত করি তাই আমরা তিনটি মানের কপি পাই (পুনরাবৃত্তের সহগের জন্য একটি, প্রথম সাবফ্যাক্টোরিয়ালের জন্য একটি, এন-2 এর জন্য শেষ )।

┌─╖┌─╖
│f╟┤♭╟
╘╤╝╘═╝
 │┌─╖
 ││f╟
 │╘╤╝
 │┌┴╖
 ││+╟
 │╘╤╝
 └─┘ 

আমি যেমন বলেছিলাম, আমরা আবার অন্যের সাথে একটি অনুলিপি হ্রাস করেছি , তারপরে আমরা এন -1 এবং এন -2 উভয়কে পুনরাবৃত্তভাবে ফিড করি fএবং শেষ পর্যন্ত দুটি ফলাফল একসাথে যুক্ত করে +

       ┐
       │
      ┌┴╖
     ┐│×╟
     │╘╤╝
     └─┘

যে সমস্ত বাকি সংখ্যাবৃদ্ধি হয় এন -1 দ্বারা ! (ঢ -1) + +! (N-2)


13

ওসিস , 5 বাইট

মার্টিন প্রদত্ত সূত্র ব্যবহার করে। কোড:

+n<*X

বিচ্ছিন্ন সংস্করণ:

+n<*

সাথে a(0) = 1এবং a(1) = 0

ব্যাখ্যা a(n) =,:

+       # Add the previous two terms, a(n - 1) + a(n - 2).
 n<     # Compute n - 1.
   *    # Multiply the top two elements.

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


Xবিটিডাব্লু: :) ব্যবহার করে দুর্দান্ত কৌশল , আপনি এখনও এটি বাস্তবায়ন করেছেন ? এই দিনগুলির একটির মধ্যে আমরা কেবলমাত্র প্রাথমিক মানগুলি পরিবর্তন করে
লুইস মেন্ডো

@ লুইসমেডো হ্যাঁ আমি করেছি! এটি একটি কমান্ড পতাকা হিসাবে ব্যবহৃত হয়েছে ( এখানে তথ্য পৃষ্ঠার একটি লিঙ্ক রয়েছে)। পরামর্শের জন্য তোমাকে ধন্যবাদ :).
আদনান


7

জেলি , 7 বাইট

R=Œ!Ḅċ0

এই পদ্ধতির derangements তৈরি করে, তাই এটি বরং ধীর।

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

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

R=Œ!Ḅċ0  Main link. Argument: n

R        Range; yield [1, ..., n].
  Œ!     Yield all permutations of [1, ..., n].
 =       Perform elementwise comparison of [1, ..., n] and each permutation.
    Ḅ    Unbinary; convert each result from base 2 to integer. This yields 0 for
         derangements, a positive value otherwise.
     ċ0  Count the number of zeroes.

7

ব্র্যাচল্যাগ (2), 11 বাইট

⟦₁{p:?\≠ᵐ}ᶜ

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

ব্যাখ্যা

এটি মূলত ইংরাজী থেকে ব্র্যাচল্যাগ-তে কেবল অনুমানের সরাসরি অনুবাদ (এবং এর ফলে সুবিধা রয়েছে যে নির্দিষ্টকরণের ছোট ছোট পরিবর্তনগুলি হ্যান্ডেল করার জন্য এটি সহজেই সংশোধন করা যেতে পারে, যেমন একটি নির্দিষ্ট তালিকার বিচ্ছিন্নতার সংখ্যা খুঁজে পাওয়া)।

⟦₁{p:?\≠ᵐ}ᶜ
⟦₁           Start with a list of {the input} distinct elements
  {      }ᶜ  Then count the number of ways to
   p         permute that list
      \      such that taking corresponding elements
    :?       in {the permutation} and the list of distinct elements
       ≠     gives different elements
        ᵐ    at every position

5

অন্তর্নিহিত সমাধান সহ ভাষা

এক্সনোরের পরামর্শ অনুসরণ করে এটি সিডাব্লুয়ের উত্তর যাতে সাবফ্যাক্টরিয়ালটি গণনা করতে বা সমস্ত বিচ্যুতি উত্পন্ন করার জন্য একক অন্তর্নিহিত ভিত্তিতে তুচ্ছ সমাধানগুলি সম্পাদনা করা উচিত।

গণিত, 12 বাইট

Subfactorial

দীর্ঘশ্বাস ম্যাথমেটিকা ​​...
এপিকবোব 57

5

পাইথন 3 , 35 32 বাইট

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

এটি বেস লাইনের সাথে @ লাইকোনির হাস্কেল উত্তর থেকে পুনরাবৃত্তির সম্পর্কটি ব্যবহার করে ! N = n! (N-1) + (-1) n ! 0 = 1

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


আমি মনে করি আপনার কাছে প্রদত্ত অন্যান্য সমীকরণ ব্যবহার করতে পারেন এখানে , যা দুই বাইট সংরক্ষণ হবে: f=lambda n:n<1or n*f(n-1)+(-1)**n
আদনান

1
তিনটি বাইট সামান্য পুনর্নির্মাণের সাথে। ;)
ডেনিস

1
এই পুনরাবৃত্তির মজাদার অংশটি হ'ল আপনি যদি বেস কেসটিকে পিছনে ঠেলে দেন তবে আপনি n=-1কোন মানটি ব্যবহার করেন তা মোটেই গুরুত্বপূর্ণ নয়। এটি কিছু ভাষার জন্য কার্যকর হতে পারে (যেমন ম্যাথমেটিকায় আপনি আসলে এটি অপরিবর্তিত রাখতে পারেন যদি এটি কোনও বাইট সংরক্ষণ করে)।
মার্টিন ইন্ডার

5

এম , 9 বাইট

o2!÷Øe+.Ḟ

আপনি মুছে ফেলার মাধ্যমে দেখতে পাচ্ছেন , এম প্রতীকী গণিত ব্যবহার করে, সুতরাং কোনও যথার্থ সমস্যা নেই।

এটি অনলাইন চেষ্টা করুন! সংক্ষিপ্ততম সমাধানটি পোস্ট করা হয়নি, তবে দ্রুত

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

o2!÷Øe+.Ḟ  Main link. Argument: n

o2         Replace input 0 with 2, as the following formula fails for 0.
  !        Compute the factorial of n or 2.
   ֯e     Divide the result by e, Euler's natural number.
      +.   Add 1/2 to the result.
        Ḟ  Floor; round down to the nearest integer.

5

এমএটিএল , 9 8 বাইট

:tY@-!As

একইভাবে @ ডেনিসের জেলি জবাবকে , এটি আসলে অনুমোদন তৈরি করে এবং তাদের মধ্যে কতটি ড্রেঞ্জমেন্টস তা গণনা করে; সুতরাং এটি ধীর।

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

:     % Input n implicitly: Push [1 2 ... n]
t     % Duplicate 
Y@    % Matrix of all permutations, each on a row
-     % Element-wise subtract. A zero in a row means that row is not a derangement
!     % Transpose
A     % True for columns that don't contain zeros
s     % Sum. Implicitly display

3

গণিত , 21 বাইট

Round@If[#>0,#!/E,1]&

আমি এটিতে খুব নতুন এবং আমি জানি না যে আমি কী করছি ...

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


1
একই বাইট গণনায় দুটি বিকল্প: Round[(#/. 0->2)!/E]&এবং ±0=1;±n_:=Round[n!/E](যদিও আমি জানি না যে ম্যাথিক্স ম্যাথমেটিকার মতো উত্স ফাইলগুলির জন্য একক-বাইট এনকোডিংগুলি সমর্থন করে কিনা)।
মার্টিন ইন্ডার

প্রথমটি ভালভাবে কাজ করে (আমি মনে করি এটি কী করে আমি জানি), তবে ম্যাথিক্স ±দ্বিতীয়টিতে সমর্থন করে না বলে মনে হয় । এটি সঙ্গে কাজ করবে f, কিন্তু দুটি বাইট ব্যয়ে।
ডেনিস

একই বাইট আরেকটি গণনা: Round[#!/E]+1-Sign@#&। বিরক্তিকর প্রাথমিক মান ...!
গ্রেগ মার্টিন

3

রুবি, 27 বাইট

f=->n{n<1?1:n*f[n-1]+~0**n}

~0**nএর চেয়ে খাটো (-1)**n!


3

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

1qi{~*)}/z

অনলাইন ডেমো

এটি পুনরাবৃত্তিটি ব্যবহার করে !n = n !(n-1) + (-1)^n, যা আমি থেকে উত্পন্ন n! / eএবং পরে আবিষ্কার করেছি ইতিমধ্যে ওইআইএস-এ রয়েছে।

ব্যবচ্ছেদ

লুপটি গণনা করে (-1)^n !n, তাই শেষে আমাদের নিখুঁত মান নেওয়া দরকার:

1     e# Push !0 to the stack
qi{   e# Read an integer n and loop from 0 to n-1
  ~   e#   Bitwise not takes i to -(i+1), so we can effectively loop from 1 to n
  *   e#   Multiply
  )   e#   Increment
}/
z     e# Take the absolute value


2

ম্যাটল্যাব, 33 বাইট

@(n)(-1)^n*hypergeom([1 -n],[],1)

অ্যানিমিপাস ফাংশন যা মেহেদী হাসানির ডিজেঞ্জমেন্টস এবং অ্যাপ্লিকেশনগুলির সেকশন 3 এর সূত্র ব্যবহার করে ।

উদাহরণ ব্যবহার:

>> @(n)(-1)^n*hypergeom([1 -n],[],1)
ans = 
    @(n)(-1)^n*hypergeom([1,-n],[],1)
>> ans(6)
ans =
   265

2

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

f=n=>!n||n*f(n-1)-(~n%2|1)

@ লাইকোনির উত্তর থেকে পুনরাবৃত্তি সম্পর্ক ব্যবহার করে Uses ES7 এ আপনি +(-1)**nপরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন -(~n%2|1)


2

পোস্টস্ক্রিপ্ট, 81 76 69 বাইট

এখানে উভয় সূত্র বাস্তবায়ন করা হয়।

n * যেসব চ (ঢ -1) + + (- 1) ^ n হল

/ এফ {ডুপ 0 ইক {পপ 1} up ডুপ ডুপ 1 সাব এফ মুল এক্সচে 2 মোড 2 মুল 1 সাব সাব} ইফেলস} ডিএফ

/f{dup 0 eq{pop 1}{dup dup 1 sub f mul -1 3 2 roll exp add}ifelse}def

এই সংস্করণটি একটি ফ্লোট আউটপুট করে। যদি কোনও পূর্ণসংখ্যা আউটপুট করা প্রয়োজন:

/f{dup 0 eq{pop 1}{dup dup 1 sub f mul -1 3 2 roll exp cvi add}ifelse}def

যার ওজন 73 বাইটে।

অন্য সূত্রটি কিছুটা দীর্ঘ: 81 বাইট।

(ঢ -1) * (চ (ঢ -1) + F (ঢ-2))

/f{dup 1 le{1 exch sub}{1 sub dup f exch dup 1 sub f 3 -1 roll add mul}ifelse}def

এই ফাংশনগুলি স্ট্যাক থেকে তাদের যুক্তি পায় এবং ফলাফলটি স্ট্যাকের উপর ছেড়ে দেয়।

আপনি কোনও ফাইলে বা একটি ইন্টারেক্টিভ পোস্টস্ক্রিপ্ট প্রম্পটে (যেমন গোস্টস্ক্রিপ্ট) এর সাথে ফাংশনগুলি পরীক্ষা করতে পারেন

0 1 12{/i exch def [i i f] ==}for

আউটপুট

[0 1]
[1 0.0]
[2 1.0]
[3 2.0]
[4 9.0]
[5 44.0]
[6 265.0]
[7 1854.0]
[8 14833.0]
[9 133496.0]
[10 1334961.0]
[11 14684570.0]
[12 176214848.0]

এখানে একটি সম্পূর্ণ পোস্টস্ক্রিপ্ট ফাইল যা স্ক্রিনে বা একটি মুদ্রক পৃষ্ঠায় আউটপুট সরবরাহ করে। (পোস্টস্ক্রিপ্টে মন্তব্যগুলি দিয়ে শুরু করুন %)।

%!PS-Adobe-3.0

% (n-1)*(f(n-1)+f(n-2))
% /f{dup 1 le{1 exch sub}{1 sub dup f exch dup 1 sub f 3 -1 roll add mul}ifelse}def

% n*f(n-1)+(-1)^n
/f{dup 0 eq{pop 1}{dup dup 1 sub f mul -1 3 2 roll exp add}ifelse}def

% 0 1 12{/i exch def [i i f] ==}for

/FS 16 def              %font size
/LM 5 def               %left margin
/numst 12 string def    %numeric string buffer

/Newline{currentpoint exch pop FS sub LM exch moveto}def
/Courier findfont FS scalefont setfont
LM 700 moveto

(Subfactorials) Newline
0 1 12{
    dup numst cvs show (: ) show f numst cvs show Newline
}for
showpage
quit

1
-1 3 2 roll expচেয়ে একটি ন্যায্য বিট খাটো exch 2 mod 2 mul 1 sub
পিটার টেলর

@ পিটারটেলর তাই! :) আমি এ সম্পর্কে ভুলে গেছি exp: ওফস: তবে এটি একটি ফ্লোট ফেরত দেয় এবং আমি মনে করি যে প্রশ্নের সাথে মানিয়ে নিতে আমার একটি পূর্ণসংখ্যা আউটপুট করা দরকার।
পিএম 2 রিং

1
আমি মনে করি আপনি এখনও একটি চক cviএবং একটি সঞ্চয় করতে পারেন। (দ্রষ্টব্য: অনির্ধারিত, তবে ডকটি পড়া থেকে আমার মনে হয় এটি কাজ করা উচিত)।
পিটার টেলর

@ পিটারটেলর হ্যাঁ, cviকাজ করে এবং এটি আমার আগের সংস্করণটির চেয়েও কম।
পিএম 2 রিং

1

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

function f($i){return$i>1?$i*f($i-1)+(-1)**$i:1-$i;}echo f($argv[1]);

এইভাবে ব্যবহার করুন a(n) = n*a(n-1) + (-1)^n


1
আপনার কেবলমাত্র পুরো প্রোগ্রামটি নয়, ফাংশনটি দেওয়া দরকার, যাতে আপনি সর্বশেষ 17 টি অক্ষর বাদ দিতে পারেন। বিশেষ কেসিং ইনপুট না দিয়ে আরও একটি সঞ্চয় রয়েছে I
পিটার টেলর

1

পিএইচপি, 50 44

for(;$i++<$argn;)$n=++$n*$i-$i%2*2;echo$n+1;

সাথে চালাও echo <n> | php -nR '<code>

এর সৌন্দর্যটি a(n) = n*a(n-1) + (-1)^nএটি কেবলমাত্র আগের মানের উপর নির্ভর করে। এটি এটিকে পুনরাবৃত্তির পরিবর্তে পুনরাবৃত্তভাবে প্রয়োগ করতে দেয়। এটি একটি দীর্ঘ ফাংশন ঘোষণা সংরক্ষণ করে ।

-Titus দ্বারা -6 বাইট । ধন্যবাদ!


-1 বাইট: $i++<$argv[1]। -2 বাইট: for(;$i++<$argv[1];)$n=++$n*$i-$i%2*2;echo$n+1;। (-3 বাইট সহ -Rএবং $argn।)
তিতাস

@ টিটাস কেউ বিরক্ত হয়েছেন? : ডি আপনি কি আমাকে একটি উদাহরণ দেবেন -Rএবং $argn?
ক্রিস্টোফ

1
বিরক্ত নয়, গল্ফ করার জন্য আগ্রহী। দেখুন php.net/manual/de/features.commandline.options.php: প্রতিধ্বনি <ইনপুট> | php -nR '<code>' ode উদাহরণস্বরূপ: কোড golf.stackexchange.com/a/113046
তিতাস

1
@ টিটাস আমি কি এটি ঠিক পেয়েছি? ;-)
ক্রিস্টোফ

0

গণিত, 40 বাইট

±0=1;±1=0;±n_:=(n-1)(±(n-1)+±(n-2))

যা ডিফল্ট আইএসও 8859-1 এনকোডিংয়ের অধীনে 31 বাইটে আসে।


0

সি, 34 বাইট

a(n){return n?n*a(n-1)-n%2*2+1:1;}

ব্যাখ্যা:

a(n){                            } define a function called a of n
     return                     ;  make the function evaluate to...
            n?                :1   set the base case of 1 when n is 0
              n*a(n-1)             first half of the formula on the page
                      -n%2*2+1     (-1)**n

0

আর, 47 বাইট

n=scan();`if`(!n,1,floor(gamma(n+1)/exp(1)+.5))

মেগো উত্তর হিসাবে একই সূত্র ব্যবহার করে ।

বিকল্প পদ্ধতি, PerMallowsলাইব্রেরি ব্যবহার করে 52 বাইট

n=scan();`if`(!n,1,PerMallows::count.perms(n,n,'h'))

0

আসলে , 18 বাইট

;!@ur⌠;!@0Dⁿ/⌡MΣ*≈

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

ব্যাখ্যা:

;!@ur⌠;!@0Dⁿ/⌡MΣ*≈
;                   duplicate input
 !                  n!
  @ur               range(0, n+1) (yields [0, n])
     ⌠;!@0Dⁿ/⌡M     for each i in range:
      ;               duplicate i
       !              i!
        @0Dⁿ          (-1)**i
            /         (-1)**i/i!
               Σ    sum
                *   multiply sum by n!
                 ≈  floor into int

একটি 12-বাইট সংস্করণ যা কার্যত আরও নির্ভুলতা থাকলে কাজ করবে:

;!╠@/1½+L@Y+

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

অন্যান্য উত্তরগুলির মতো নয় (পোস্টিং হিসাবে), এই সমাধানটি পুনরাবৃত্তির সূত্র বা সংক্ষেপের সূত্র ব্যবহার করে না। পরিবর্তে, এটি নিম্নলিখিত সূত্র ব্যবহার করে:

অবসান সূত্র

এই সূত্রটি বাস্তবে কার্যকর করা তুলনামূলকভাবে সহজ:

!╠@/1½+L
!         n!
 ╠        e
  @/      divide n! by e
    1½+   add 0.5
       L  floor

এখন, একমাত্র সমস্যা হল সূত্র শুধুমাত্র ইতিবাচক জন্য ঝুলিতে n। আপনি যদি ব্যবহার করার চেষ্টা করেন n = 0তবে সূত্রটি ভুল উপায়ে দেয় 0। এটি সহজেই সংশোধন করা হয়েছে: ইনপুটটিতে বুলিয়ান অবহেলা প্রয়োগ করে এবং সূত্রের আউটপুট যুক্ত করে, সঠিক আউটপুট সমস্ত অ-নেগেটিভের জন্য দেওয়া হয় n। সুতরাং, সেই সংশোধন সহ প্রোগ্রামটি হ'ল:

;!╠@/1½+L@Y+
;             duplicate input
 !            n!
  ╠           e
   @/         divide n! by e
     1½+      add 0.5
        L     floor
         @Y   boolean negate the other copy of the input (1 if n == 0 else 0)
           +  add

আমার জন্য নেতিবাচক উত্তর দিতে থাকে ...
লিকি নুন

@ ল্যাকইনুন এটি যথার্থ সীমাবদ্ধতার কারণে। বড় ইনপুটগুলির (চারপাশের n = 100) জন্য, (-1)**n/n!ডাবল-স্পষ্টতা আইইইই 754 ফ্লোটের সাথে প্রতিনিধিত্ব করা যায় না। চ্যালেঞ্জ অনুযায়ী এটি গ্রহণযোগ্য।
মেগো

এমনকি এর জন্যও n=4...
লিকি নুন

পছন্দ করুন আমি জানিনা কেন আমি মেঝে বিভাগ ব্যবহার করছিলাম। এখনই এটি ঠিক করা।
মেগো



0

অ্যালিস , 20 18 বাইট

1/o
k\i@/&wq*eqE+]

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

ব্যাখ্যা

এই ব্যবহারসমূহ থেকে পুনরাবৃত্তির Laikoni এর উত্তর , ! এন = ঢ! (ঢ-1) + (-1) এন । ফানসিটনের উত্তরের মতো, আমি বেস কেসটি ব্যবহার করছি ! (- 1) = 1 । আমরা স্ট্যাকের সাথে এটি 1 রেখেছি 1.। তারপর এই...

.../o
...\i@/...

... কেবলমাত্র দশমিক I / O কাঠামো। মূল কোডটি আসলে

&wq*eqE+]k

ভেঙ্গে পড়া:

&w    Push the current IP address N times to the return address stack, which
      effectively begins a loop which will be executed N+1 times.
  q     Push the position of the tape head, which we're abusing as the
        iterator variable n.
  *     Multiply !(n-1) by n.
  e     Push -1.
  q     Retrieve n again.
  E     Raise -1 to the nth power.
  +     Add it to n*!(n-1).
  ]     Move the tape head to the right.
k     Jump back to the w, as long as there is still a copy of the return
      address on the return address stack. Otherwise, do nothing and exit
      the loop.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.