उचित रूप से रैंक मान


23

कार्य

पूर्णांक x 1 … x n की इनपुट सूची को देखते हुए , रैंक r 1 … r n ( {1… n} का क्रमचय) की सूची की गणना करें ताकि x r 1 r  x r 2  ≤… r x r n । फिर, प्रत्येक के लिए एक्स मैं , लेकिन उसकी रैंक सभी मूल्यों के रैंक का समांतर माध्य से में बदलने के एक्स के बराबर हैं एक्स मैं । (अर्थात्, जब भी x में समान मूल्यों के बीच एक टाई होती है, तो उन सभी के बीच रैंक को काफी पुनर्वितरित करता है।) रैंकों की संशोधित सूची r ' 1 ... r' आउटपुट करेंn

(आंकड़े गीक्स के लिए: मान-व्हिटनी यू टेस्ट (विधि दो, चरण 1) में टिप्पणियों की ऐसी रैंकिंग का उपयोग किया जाता है )

उदाहरण

एक इनपुट सूची [3, -6, 3, 3, 14, 3] को देखते हुए , रैंक की पहली सूची [2, 1, 3, 4, 6, 5] होगी, जो सूची को [-6, में क्रमबद्ध करेगी । 3, 3, 3, 3, 14] । फिर, इनपुट सूची में सभी 3 s के लिए रैंक (2 + 3 + 4 + 5)4 = 3.5 में समरूप हैं । अंतिम आउटपुट [3.5, 1, 3.5, 3.5, 6, 3.5] है

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

[4, 1, 4] -> [2.5, 1.0, 2.5]
[5, 14, 14, 14, 14, 5, 14] -> [1.5, 5.0, 5.0, 5.0, 5.0, 1.5, 5.0]
[9, 9, -5, -5, 13, -5, 13, 9, 9, 13] -> [5.5, 5.5, 2.0, 2.0, 9.0, 2.0, 9.0, 5.5, 5.5, 9.0]
[13, 16, 2, -5, -5, -5, 13, 16, -5, -5] -> [7.5, 9.5, 6.0, 3.0, 3.0, 3.0, 7.5, 9.5, 3.0, 3.0]

नियम

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।


जवाबों:


7

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

ð_'Ṡ‘S‘H

@ Xnor के उत्तरcmp से चाल का उपयोग करके 2 बाइट्स सहेजे गए ।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

यह काम किस प्रकार करता है

ð_'Ṡ‘S‘H  Main link. Left argument: A (list of values)

ð         Make the chain dyadic, setting the right argument to A.
 _'       Spawned subtraction; compute the matrix of differences.
   Ṡ      Apply the sign function to each difference.
    ‘     Increment.
     S    Sum across columns.
      ‘   Increment.
       H  Halve.

6

अजगर, १२

m+l<#dQ.OS/Q

परीक्षण सूट

प्रत्येक मान के लिए यह अंकगणितीय माध्य की गणना करता है [1..frequency]और वर्तमान की तुलना में कम मूल्यों को जोड़ता है।

यह काम करता है क्योंकि प्रत्येक मूल्य के लिए हम गणना करेंगे:

(1 / frequency) * sum (i = 1..frequency) i + count_less

जिसे हम सरल कर सकते हैं:

(1 / frequency) * [ frequency * (frequency + 1) / 2 + count_less * frequency ]

और फिर से:

(frequency + 1) / 2 + count_less

हालाँकि, पाइथ में इस अन्य सूत्र के बजाय माध्य बिलिन का उपयोग करके पहले समन की गणना करना गोल्फर था।


4

पायथन 2, 51 बाइट्स

lambda l:[-~sum(1+cmp(y,x)for x in l)/2.for y in l]

प्रत्येक तत्व के लिए y, cmpअभिव्यक्ति प्रत्येक छोटे के लिए 2 अंक देती है xऔर प्रत्येक बराबर के लिए 1 अंक x। इस राशि को 1 और जोड़कर सही श्रेणी में रखा गया है। 2.पूर्णांक विभाजन से बचने के लिए की जरूरत है।

पायथन 3, 52 बाइट्स

पायथन 3 में कमी है cmp, बूलियन अभिव्यक्ति (+2 बाइट्स) की आवश्यकता होती है, लेकिन इसमें फ्लोट डिवीजन (-1 बाइट) होता है।

lambda l:[-~sum((y>x)+(y>=x)for x in l)/2for y in l]

3

MATL , 14 बाइट्स

7#utG&S&S2XQw)

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें (कोड का थोड़ा संशोधित संस्करण; प्रत्येक परिणाम एक अलग लाइन पर है)।

      % Implicit input. Example: [5 14 14 14 14 5 14]
7#u   % Replace each value by a unique, integer label. Example: [1; 2; 2; 2; 2; 1; 2]
t     % Duplicate
G&S   % Push input again. Sort and get indices of the sorting. Example: [1 6 2 3 4 5 7]
&S    % Sort and get the indices, again. This gives the ranks. Example: [1 3 4 5 6 2 7]
2XQ   % Compute mean of ranks for equal values of the integer label. Example: [1.5; 5]
w     % Swap top two elements in stack
)     % Index the means with the integer labels. Example: [1.5; 5; 5; 5; 5; 1.5; 5]
      % Implicit display


3

आर, 17 12 बाइट्स

STDIN आउटपुट से इनपुट को STDOUT में ले जाता है। यदि आउटपुट लचीला है तो हम इसे खोद सकते हैं cat()

rank(scan())

काफी सरल, बिलियन रैंक का उपयोग करता है जो टाई ब्रेकर के लिए औसत करने के लिए चूक करता है।

उपयोग में:

> rank(scan())
1: 5 14 14 14 14 5 14
8: 
Read 7 items
[1] 1.5 5.0 5.0 5.0 5.0 1.5 5.0
> rank(scan())
1: 3 -6 3 3 14 3
7: 
Read 6 items
[1] 3.5 1.0 3.5 3.5 6.0 3.5
> 

आप इसे छोड़ सकते हैं cat(), अगर यह मेरे ऊपर है। मुझे नहीं पता कि समुदाय की सहमति क्या है, हालांकि।
लिन

@ लीन थैंक्स आई विल। मैं हमेशा इसे वापस रख सकता हूं।
मिकट

2

जे, 18 बाइट्स

1-:@+1+/"1@:+*@-/~

Xnor की विधि का उपयोग करके डेनिस के समाधान पर आधारित है ।

सीधे-सीधे दृष्टिकोण का उपयोग करने के लिए मेरे लिए 24 बाइट्स की आवश्यकता होती है।

(i.~~.){](+/%#)/.1+/:@/:

प्रयोग

   f =: 1-:@+1+/"1@:+*@-/~
   f 3 _6 3 3 14 3
3.5 1 3.5 3.5 6 3.5
   f 4 1 4
2.5 1 2.5
   f 5 14 14 14 14 5 14
1.5 5 5 5 5 1.5 5
   f 9 9 _5 _5 13 _5 13 9 9 13
5.5 5.5 2 2 9 2 9 5.5 5.5 9
   f 13 16 2 _5 _5 _5 13 16 _5 _5
7.5 9.5 6 3 3 3 7.5 9.5 3 3

1

दरअसल, 18 बाइट्स

;╗`╝╜"╛-su"£MΣu½`M

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

यह अनिवार्य रूप से xnor के पायथन समाधान का एक बंदरगाह है ।

स्पष्टीकरण:

;╗`╝╜"╛-su"£MΣu½`M
;╗                  push a copy of input to reg0
  `             `M  for x in input:
   ╝                  push x to reg1
    ╜                 push input from reg0
     "    "£M         for y in input:
      ╛                 push x from reg0
       -s               cmp(y,x) (sgn(y-x))
         u              add 1
             Σu½      sum, add 1, half

1

एपीएल, 17 वर्ण

(y+.×⍋X)÷+/y←∘.=⍨X

यह मानते हुए कि सूची में संग्रहीत है X

स्पष्टीकरण:

ध्यान दें कि एपीएल दाएं से बाएं तक के भावों का मूल्यांकन करता है। फिर:

  • ∘.=⍨X= X∘.=Xजहां डाईएडिक फ़ंक्शन के रूप ∘.=में बाहरी उत्पाद =है। (जहां आप सामान्य रूप से गुणा करेंगे। इसलिए गणितीय बाहरी उत्पाद के रूप में लिखा जा सकता है ∘.×।)
  • परिणामस्वरूप मैट्रिक्स को संग्रहीत किया जाता है yऔर प्रत्येक रैंक के लिए समान वस्तुओं की संख्या का वेक्टर देने के लिए yसीधे उपयोग +किया जाता है (इसे कॉल करने देता है z←+/y)।
  • ⍋X की रैंक लौटाता है X
  • y+.×⍋X इस वेक्टर के साथ हमारे मैट्रिक्स y का आंतरिक उत्पाद देता है।
  • परिणाम (घटक वार) द्वारा विभाजित है z


0

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

a=>a.map(n=>a.reduce((r,m)=>r+(n>m)+(n>=m),1)/2)

संपादित करें: 1 बाइट को एक्सप्रेशन में सुधार करके सहेजा गया ताकि यह अब @ xnor के पायथन 3 उत्तर जैसा लगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.