अप्रभेद्य वस्तुओं के साथ क्रमपरिवर्तन


12

पूर्णांकों की सूची को देखते हुए, एक बार गिने जाने वाले अविभाज्य क्रमपरिवर्तन के साथ पूर्णांकों के क्रमपरिवर्तन की संख्या को आउटपुट करें। यदि nपूर्णांक हैं, और अप्रभेद्य संख्याओं के प्रत्येक समूह की लंबाई है n_i, तो यह हैn! / (n_1! * n_2! * ...)

नियम

  • इनपुट एक फ़ंक्शन या 1 से 12 गैर-नकारात्मक पूर्णांकों वाले प्रोग्राम के तर्क के रूप में सूची का कुछ रूप होगा।

  • जैसा कि ऊपर बताया गया है आउटपुट आउटपुट की छपाई या रिटर्निंग करेगा।

  • कोई मानक कमियां या अंतर्निहित कार्य (क्रमपरिवर्तन, संयोजन, आदि पैदा करना)। कारखानों की अनुमति है।

परीक्षण के मामलों

इनपुट:

1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1

आउटपुट:

60
1
83160

जब आप कहते हैं कि कोई निर्माण नहीं हुआ है, तो क्या इसमें वह शामिल है जो मैंने तब किया था जब मैंने सभी निर्माणों के निर्माण के लिए एक बिलिन का उपयोग किया था?
माल्टसेन

1
यह बहुराष्ट्रीय गुणांक की गणना के समान है । क्या इनपुट के लिए समान प्रविष्टियों को गिनना, इसे पर्याप्त रूप से भिन्न बनाता है जो कि एक डुबकी नहीं है?
xnor

@ अच्छी तरह से यहाँ आपको वास्तव में डुप्लिकेट को गिनना है, इसलिए यह उतना सीधा नहीं है जितना मुझे लगता है। अन्य मूल्यों में बहुत सीधे प्लगिंग है।
qwr

@ मैल्तेन दुःख से हाँ, मुझे प्रश्न को अद्यतन करना होगा
qwr

1
@LuisMendo हाँ यह है, हालाँकि इससे कोई फर्क नहीं पड़ना चाहिए जहाँ तक मैं कल्पना कर सकता हूँ
qwr

जवाबों:


6

पायथन, 48 बाइट्स

f=lambda l:l==[]or len(l)*f(l[1:])/l.count(l[0])

एक पुनरावर्ती कार्यान्वयन।

सूत्र में n! / (n_1! * n_2! * ...), यदि हम पहला तत्व निकालते हैं (यह कहते हैं 1), शेष n-1तत्वों के लिए क्रमपरिवर्तन की संख्या है

(n-1)! / ((n_1-1)! * n_2! * ...) ==
n! / n / (n_1! / n_1! * n_2! * ...) == 
n/n_1 * (n! / (n_1! * n_2! * ...)`)

इसलिए, हम n/n1सूची के बाकी हिस्सों के लिए पुनरावर्ती परिणाम द्वारा पहले वाले के बराबर तत्वों के पारस्परिक-अंश से गुणा करके उत्तर प्राप्त करते हैं । खाली सूची 1 का आधार मामला देती है।


आप /l.count(l[0])अंत में क्यों नहीं डालते ? फिर आपको उस icky फ़्लोटिंग पॉइंट की आवश्यकता नहीं है।
फ़ेरसुम

4

MATL , 14 13 12 बाइट्स

fpGu"@G=s:p/

इसे ऑनलाइन आज़माएं!

व्याख्या

@ अदनान के जवाब में दृष्टिकोण बहुत समान है ।

f       % Take input implicitly. Push array of indices of nonzero entries.
        % This gives [1 2 ... n] where n is input length.
p       % Product (compute factorial)
Gu      % Push input. Array of its unique elements
"       % For each of those unique values
  @     %   Push unique value of current iteration
  G=s   %   Number of times (s) it's present (=) in the input (G)
  :p    %   Range, product (compute factorial)
  /     %   Divide
        % End for each implicitly. Display implicitly

3

05AB1E , 15 14 13 बाइट्स

कोड:

D©g!rÙv®yQO!/

स्पष्टीकरण:

               # implicit input
D©             # duplicate and save a copy to register
  g!           # factorial of input length (total nr of permutations without duplicates)
    rÙv        # for each unique number in input
       ®yQO!   # factorial of number of occurances in input
            /  # divide total nr of permutations by this
               # implicit output

CP-1252 एन्कोडिंग का उपयोग करता है ।

इसे ऑनलाइन आज़माएं!


2

जावास्क्रिप्ट (ईएस 6), 64 61 बाइट्स

a=>a.sort().map((x,i)=>r=r*++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r

दिए गए फॉर्मूले का उपयोग करता है, प्रत्येक फैक्टरियल को r=r*++iआकस्मिक रूप से गणना करने के अलावा (उदाहरण के लिए प्रभावी ढंग से कैलक्लेट्सn! )।

संपादित करें: मूल रूप से मैंने किसी भी परिमित संख्या को स्वीकार किया था लेकिन मैंने 3 बाइट्स तब बचाए जब @ user81655 ने बताया कि मुझे केवल सकारात्मक पूर्णांक का समर्थन करने की आवश्यकता थी (हालांकि मैं वास्तव में गैर-नकारात्मक पूर्णांक स्वीकार करता हूं)।


r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r?
user81655

@ user81655 आह, मैंने सवाल को पूरी तरह से पढ़ा नहीं था और इस बात को नजरअंदाज कर दिया था कि मैं सकारात्मक पूर्णांकों के मूल्यों पर भरोसा कर सकता हूं। मुझे यह पसंद नहीं है *=क्योंकि वह गोलाई की त्रुटियों का परिचय देता है।
नील

2

अजगर, 11 बाइट्स

/.!lQ*F/V._

परीक्षण सूट

मानक सूत्र का उपयोग करता है n! / (count1! * count2! * ...), सिवाय इसके कि गिनती के भाज्य पाए जाते हैं कि कितनी बार प्रत्येक तत्व उपसर्ग में अग्रणी होता है, फिर ऐसी सभी संख्याओं को एक साथ गुणा करना।

स्पष्टीकरण:

/.!lQ*F/V._
/.!lQ*F/V._QQ    Implicit variable introduction.
                 Q = eval(input())
         ._Q     Form all prefixes of the input.
       /V   Q    Count how many times each element occurs in the prefix
                 ending with that element.
     *F          Fold on multiplication - take the product.
 .!lQ            Take the factorial of the input length
/                Divide.


1

रूबी, 75 74 बाइट्स

किंदा चाहता है कि रूबी के Mathमॉड्यूल में एक फैक्टोरियल फंक्शन हो ताकि मुझे अपना निर्माण न करना पड़े।

->l{f=->x{x<2?1:x*f[x-1]};l.uniq.map{|e|f[l.count e]}.inject f[l.size],:/}

1

CJam, 17 बाइट्स

q~_,\$e`0f=+:m!:/

इसका परीक्षण यहां करें।

व्याख्या

q~   e# Read input and evaluate.
_,   e# Duplicate and get length.
\$   e# Swap with other copy and sort it.
e`   e# Run-length encode. Since the list is sorted, this tallies the numbers.
0f=  e# Select the tally of each number.
+    e# Prepend the length of the input.
:m!  e# Compute the factorial of each number in the list.
:/   e# Fold division over it, which divides each factorial of a tally into
     e# the factorial of the length.

1

जेली, 8 बाइट्स

W;ĠL€!:/

इसे ऑनलाइन आज़माएं!

W;ĠL€!:/ example input:             [1, 3000, 2, 2, 8]
W        wrap:                      [[1, 3000, 2, 2, 8]]
  Ġ      group index by appearance: [[1], [3, 4], [5], [2]]
 ;       concatenate:               [[1, 3000, 2, 2, 8], [1], [3, 4], [5], [2]]
   L€    map by length:             [5, 1, 2, 1, 1]
     !   [map by] factorial:        [120, 1, 2, 1, 1]
      :/ reduce by division:        120÷1÷2÷1÷1 = 60

1

जे, 13 बाइट्स

#(%*/)&:!#/.~

प्रयोग

   f =: #(%*/)&:!#/.~
   f 1 3000 2 2 8
60
   f 1 1 1
1
   f 2 4 3 2 3 4 4 4 4 4 1 1
83160

व्याख्या

#(%*/)&:!#/.~  Input: A
         #/.~  Partition A by equal values and get the size of each, these are the tallies
#              Get the size of A
      &:!      Take the factorial of both the size and the tallies
   */          Reduce using multiplication the factorial of the tallies
  %            Divide the factorial of the size by that product and return
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.