সমীক্ষার সংখ্যা


16

কার্য

2 ধনাত্মক পূর্ণসংখ্যা nএবং kযেখানে n > k, nপৃথক উপাদানের একটি সেট থেকে পৃথক উপাদানগুলির একটি সেট থেকে আউটপুট দেয় k

সংজ্ঞা

একটি ফাংশন এফ: এস → টিকে সার্জেশন বলা হয় যদি প্রতিটি টি-টি-এর জন্য চ (গুলি) = টি থাকে।

উদাহরণ

যখন n=3k=2, আউটপুট 6, যেহেতু আছে 6থেকে surjections {1,2,3}করতে {1,2}:

  1. 1↦1, 2↦1, 3↦2
  2. 1↦1, 2↦2, 3↦1
  3. 1↦1, 2↦2, 3↦2
  4. 1↦2, 2↦1, 3↦1
  5. 1↦2, 2↦1, 3↦2
  6. 1↦2, 2↦2, 3↦1

Testcases

n k output
5 3 150
8 4 40824
9 8 1451520

উল্লেখ

স্কোরিং

এটি । বাইট জিতে সংক্ষিপ্ত উত্তর।

স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।


11
অনুমানের একটি সংজ্ঞাটি দুর্দান্ত হবে।
স্টিভি গ্রিফিন

3
এটা ইচ্ছাকৃত এটা কি এন করতে সমান নয় ?
ডেনিস

1
@ ডেনিস আমি প্রতিদ্বন্দ্বিতা থেকে প্রতিটি সম্ভাব্য প্রান্তের মামলা বাদ দিতে চাই
লিকি নুন

3
এটি অন্তর্ভুক্ত করা একটি গুরুত্বপূর্ণ প্রান্ত মামলা মত বলে মনে হচ্ছে। আমার অনুমান যে n> k এর পক্ষে কাজ করা বেশিরভাগ উত্তরগুলি n == কে এর জন্যও কাজ করবে তবে এটি কোথাও কিছু
লুক্কায়িত

@ যে কেউ বন্ধ করার পক্ষে ভোট দিয়েছে তার কারণ কী?
dylnan

উত্তর:


5

জেলি , 5 4 বাইট

ṗṬML

এটি একটি ও (কে এন ) ব্রুট ফোর্স সমাধান।

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

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

ṗṬML  Main link. Left argument: k. Right argument: n.

ṗ     Cartesian power; yield the list of all n-tuples over {1, ..., k}.
      Each tuple represents a (not necessarily surjective) function from
      {1, ..., n} to {1, ..., k}.
 Ṭ    Apply the "untruth" atom to each tuple.
      Ṭ maps a list of indices to an array with 1's at those indices, and exactly
      as many zeroes as needed to build the array.
      Examples:
           [1, 2, 3, 3, 3] -> [1, 1, 1]
           [1, 3, 5]       -> [1, 0, 1, 0, 1]
           [2, 6, 2, 4, 4] -> [0, 1, 0, 1, 0, 1]
  M   Yield all indices of maximal elements, i.e., all indices of [1] * k.
   L  Take the length.

4

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

s(_,1)=1
s(1,_)=0
s(m,n)=n*(s(m-1,n-1)+s(m-1,n))

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

সার্জেশনের গণনা কেন? s(m,n)=n*s(m-1,n-1)+n*s(m-1,n) ?

nচিত্র সংগ্রহ করার জন্য , আমি হয় করতে পারেন

  • একটি Singleton আলিঙ্গন [m]একটিতেও সৃষ্টি nপার্শ্ববর্তী গণ্ডি n-1গ্রুপ
  • বা ইতিমধ্যে বিদ্যমান গ্রুপের mযে কোনওটিতে আমার নতুন যুক্ত করুনn[1..m-1]

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

m#n|n<2=1|m<2=0|o<-m-1=n*(o#(n-1)+o#n)

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


2
ইনফিক্স অপারেটর ব্যবহার করে 38 বাইট: এটি অনলাইনে চেষ্টা করুন!
লাইকনি

4

লিন , 66 বাইট

def s:_->nat->nat|(m+1)(n+1):=(n+1)*(s m n+s m(n+1))|0 0:=1|_ _:=0

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


সঠিকতার প্রমাণ

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


ব্যাখ্যা

আসুন ফাংশনটি উনলগ্ফ:

def s : nat->nat->nat
| (m+1) (n+1) := (n+1)*(s m n + s m (n+1))
| 0     0     := 1
| _     _     := 0

ফাংশনটি প্যাটার্ন মিল এবং পুনরাবৃত্তি দ্বারা সংজ্ঞায়িত করা হয়েছে, উভয়ই বিল্ট-ইন সমর্থন রয়েছে।

আমরা সংজ্ঞায়িত করি s(m+1, n+1) = (n+1) * (s(m, n) + s(m, n+1)এবং s(0, 0) = 1, যা খোলা ছেড়ে দেয় s(m+1, 0)এবং s(0, n+1)উভয়ই সংজ্ঞায়িত হয়0 শেষ কেস দ্বারা ।

চর্বিহীন ব্যবহারসমূহ lamdba ক্যালকুলাস সিনট্যাক্স, তাই s m nহয় s(m, n)


এখন, সঠিকতার প্রমাণ: আমি এটি দুটি উপায়ে বলেছি:

def correctness : ∀ m n, fin (s m n) ≃ { f : fin m → fin n // function.surjective f } :=
λ m, nat.rec_on m (λ n, nat.cases_on n s_zero_zero (λ n, s_zero_succ n)) $
λ m ih n, nat.cases_on n (s_succ_zero m) $ λ n,
calc fin (s (nat.succ m) (nat.succ n))
   ≃ (fin (n + 1) × (fin (s m n + s m (n + 1)))) :
  (fin_prod _ _).symm
... ≃ (fin (n + 1) × (fin (s m n) ⊕ fin (s m (n + 1)))) :
  equiv.prod_congr (equiv.refl _) (fin_sum _ _).symm
... ≃ (fin (n + 1) × ({f : fin m → fin n // function.surjective f} ⊕
         {f : fin m → fin (n + 1) // function.surjective f})) :
  equiv.prod_congr (equiv.refl _) (equiv.sum_congr (ih n) (ih (n + 1)))
... ≃ {f // function.surjective f} : s_aux m n

def correctness_2 (m n : nat) : s m n = fintype.card { f : fin m → fin n // function.surjective f } :=
by rw fintype.of_equiv_card (correctness m n); simp

এর মধ্যে একটি bijection: প্রথম এক কি সত্যিই ঘটছে হয় [0 ... s(m, n)-1]এবং থেকে surjections [0 ... m-1]সম্মুখের[0 ... n-1]

দ্বিতীয় কিভাবে এটি সাধারণত বলা, যে হয় s(m, n)থেকে surjections এর cardinality হয় [0 ... m-1]সম্মুখের [0 ... n-1]


চর্বিধারা টাইপ থিয়োরিটিকে তার ভিত্তি হিসাবে ব্যবহার করে (সেট তত্ত্বের পরিবর্তে)। টাইপ থিওরিতে, প্রতিটি বস্তুর একটি প্রকার থাকে যা এর সহজাত থাকে। natপ্রাকৃতিক সংখ্যার ধরণ এবং প্রাকৃতিক সংখ্যা হিসাবে বিবৃতিটি 0প্রকাশ করা হয় 0 : nat। আমরা বলি যে 0এটি টাইপ nat, এবং এটি natআছে0 একটি বাসিন্দা হিসাবে ।

প্রস্তাব (বিবৃতি / জবানবন্দি) এছাড়াও প্রকার: তাদের বাসিন্দা প্রস্তাবের প্রমাণ হয়।


  • def: আমরা একটি সংজ্ঞা চালু করতে যাচ্ছি (কারণ একটি বাইজিকেশন আসলেই একটি ফাংশন, কেবল একটি প্রস্তাব নয়)।

  • correctness: সংজ্ঞা নাম

  • ∀ m n: প্রত্যেকের জন্য mএবং n(হ্রাসগুলি স্বয়ংক্রিয়ভাবে অনুমান করে যে তাদের ধরণটি এরপরে যা ঘটেছিল তার natকারণে)।

  • fin (s m n)স্বাভাবিক সংখ্যার যে চেয়ে ছোট ধরণ হয় s m n। বাসিন্দা তৈরি করতে, একটি প্রাকৃতিক সংখ্যা এবং একটি প্রমাণ দেয় যে এটির চেয়ে ছোট s m n

  • A ≃ B: প্রকার Aএবং প্রকারের মধ্যে বাইজিকেশন B। বাইজেকশন বলা বিভ্রান্তিমূলক, কারণ আসলে প্রকৃতপক্ষে বিপরীত কার্যটি সরবরাহ করতে হয়।

  • { f : fin m → fin n // function.surjective f }থেকে surjections ধরণ fin mথেকে fin n। এই সিনট্যাক্স ধরণ থেকে একটি উপপ্রকার তৈরী করে fin m → fin n, থেকে ফাংশন ধরণ অর্থাৎ fin mকরতে fin n। বাক্য গঠনটি হ'ল { var : base type // proposition about var }

  • λ m: ∀ var, proposition / type involving varআসলেই এমন একটি ফাংশন যা varইনপুট হিসাবে গ্রহণ করে তাই λ mইনপুটটি প্রবর্তন করে। ∀ m n,স্বল্প হাতের জন্য∀ m, ∀ n,

  • nat.rec_on m: পুনরাবৃত্তি করা m। এর জন্য কিছু সংজ্ঞায়িত করতে m, জিনিসটির জন্য সংজ্ঞা দিন 0এবং তারপরে জিনিসটি প্রদান করুন k, এর জন্য জিনিসটি তৈরি করুন k+1। একটি লক্ষ্য করবে যে এটি আনয়নের অনুরূপ, এবং প্রকৃতপক্ষে এটি চার্চ-হাওয়ার্ডের চিঠিপত্রের ফলাফল । বাক্য গঠনটি হ'লnat.rec_on var (thing when var is 0) (for all k, given "thing when k is k", build thing when var is "k+1")

হেই, এটি দীর্ঘ হচ্ছে এবং আমি কেবল তৃতীয় লাইনে আছি correctness...


3

জে , 19 বাইট

-/@(^~*]!0{])],i.@-

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

ব্যাখ্যা

-/@(^~*]!0{])],i.@-  Input: n (LHS), k (RHS)
                  -  Negate k
               i.@   Range [k-1, k-2, ..., 0]
             ]       Get RHS
              ,      Join, forms [k, k-1, ..., 0]
   (        )        Dyad between n (LHS), [k, k-1, ..., 0] (RHS)
           ]           Get RHS
         0{            Select value at index 0
       ]               Get RHS
        !              Binomial coefficient
    ^~                 Raise each in RHS to power of n
      *                Multiply
-/@                  Reduce from right to left using subtraction (forms alternating sum)


2

আর , 49 বাইট

function(n,k,j=0:k)((-1)^(k-j)*j^n)%*%choose(k,j)

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

মারিও কাতালানির একটি সূত্র কার্যকর করে:

T(n, k) = Sum_{j=0..k} (-1)^(k-j)*j^n*binomial(k, j)

বা পর্যায়ক্রমে:

T(n, k) = Sum_{j=0..k} (-1)^j*binomial(k, j)*(k-j)^n

যা আর-তে একই বাইট গণনা দেয়


2

পাইথন 2 , 56 53 50 বাইট

f=lambda n,k:n/k and(1/k or f(n-1,k-1)+f(n-1,k))*k

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

-3 বাইট H.PWiz ধন্যবাদ।

-3 বাইটস ডেনিসকে ধন্যবাদ।

  • যদি n<kসমস্ত kএইভাবে ম্যাপ করা যায় না তবে কোনও সমীক্ষা নেই।n/k andএই যত্ন নেয়।
  • গ্রহণ f(0,0)=1আমাদের প্রয়োজন একমাত্র ননজারো বেস কেস দেয়। 1/k orএটি অর্জন।


2

ব্রেন-ফ্লাক , 142 বাইট

({}<({}()){({}[(())]<<>{({}({})<>)<>}{}>)}{}>)<>{<>(({}<>)<{({}[()]<([])({([{}]()({}))([{}]({}))}{}[{}])>)}{}({}<>)>)<>}<>{}{}{({}<>[{}])<>}<>

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

এটি স্ট্যান্ডার্ড অন্তর্ভুক্তি-বর্জন সূত্র ব্যবহার করে।

আমি এই মুহূর্তে একটি সম্পূর্ণ ব্যাখ্যা লিখতে পারি না, তবে এখানে একটি উচ্চ-স্তরের ব্যাখ্যা:

# Compute k-th row of Pascal's triangle
({}<({}()){({}[(())]<<>{({}({})<>)<>}{}>)}{}>)<>

# Multiply each element by n^j (and reverse to other stack)
{<>(({}<>)<{({}[()]<([])({([{}]()({}))([{}]({}))}{}[{}])>)}{}({}<>)>)<>}

# Compute alternating sum
<>{}{}{({}<>[{}])<>}<>




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