মোটামুটি র‌্যাঙ্কের মান


23

কার্য

পূর্ণসংখ্যার একটি ইনপুট তালিকা দেওয়া এক্স 1 ... এক্স এন , পদমর্যাদার একটি তালিকা গনা r 1 ... দ N (একটি বিন্যাস {1 ... এন} ) যাতে এক্স R 1  ≤ এক্স R 2  ≤ ... ≤ এক্স N । এর পরে, প্রতিটি এক্স আমি তার র্যাঙ্ক সব মূল্যবোধের পদমর্যাদার গাণিতিক গড় করে প্রতিস্থাপন এক্স যে সমান এক্স আমি । (এটি, যখনই x এর সমান মানের মধ্যে একটি টাই হয়, তখন তাদের সকলের মধ্যে যথাযথভাবে পুনরায় বিতরণ করে)) র ' 1 1 ... r' পরিবর্তিত তালিকাটিকে আউটপুট দিনএন

(পরিসংখ্যান গিক্সের জন্য: মান – হুইটনি ইউ পরীক্ষায় এই জাতীয় পর্যবেক্ষণগুলির ব্যবহার করা হয় (পদ্ধতি দুটি, পদক্ষেপ 1))

উদাহরণ

একটি ইনপুট তালিকা দেওয়া [3, -6, 3, 3, 14, 3] , র‌্যাঙ্কের প্রথম তালিকাটি [2, 1, 3, 4, 6, 5] হবে , যা তালিকাটিকে [-6, 3, 3, 3, 3, 14] । তারপর, সব জন্য পদমর্যাদার 3 ইনপুট তালিকায় গুলি ছড়িয়ে evened হয় (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

পাইথ, 12

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

এমএটিএল , 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()যদি তা আমার উপর নির্ভর করে তবে আপনি তা ফেলে দিতে পারেন। যদিও সম্প্রদায়ের sensকমত্য হচ্ছে তা আমি জানি না।
লিন

@ লিন ধন্যবাদ আমি করব। আমি সবসময় এটি পিছনে রাখতে পারেন।
মিকিটি

2

জে, 18 বাইট

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

এক্সনোর পদ্ধতি ব্যবহার করে ডেনিসের সমাধানের ভিত্তিতে ।

একটি সোজা এগিয়ে ব্যবহারের জন্য আমার জন্য 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

এপিএল, ১rs টি চর

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

ধরে নিচ্ছি যে তালিকাটি সঞ্চিত আছে X

ব্যাখ্যা:

নোট করুন যে এপিএল ডান থেকে বামে অভিব্যক্তিগুলির মূল্যায়ন করে। তারপর:

  • ∘.=⍨X= বহিরাগত পণ্য X∘.=Xযেখানে ডায়াডিক ফাংশন হিসাবে ∘.=ব্যবহার =করা হয়। (যেখানে আপনি সাধারণত গুন করবেন ly সুতরাং গাণিতিক বাহ্যিক পণ্য হিসাবে এটি লেখা যেতে পারে ∘.×))
  • ফলস্বরূপ ম্যাট্রিক্স সংরক্ষণ করা হয় yএবং প্রতিটি র‌্যাঙ্কের জন্য সমান বস্তুর সংখ্যার ভেক্টর দেওয়ার yজন্য সরাসরি ভাঁজ করা +হয় (এটি কল করতে দিন z←+/y)।
  • ⍋X ফিরে আসে X
  • y+.×⍋X এই ভেক্টরের সাথে আমাদের ম্যাট্রিক্স ওয়াইয়ের অভ্যন্তরীণ পণ্য সরবরাহ করে।
  • ফলাফল ভাগ করা (উপাদান অনুসারে) দ্বারা z


0

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

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

সম্পাদনা করুন: এক্সপ্রেশনটি সংশোধন করে 1 বাইট সংরক্ষিত হয়েছে এখন এটি @ xnor এর পাইথন 3 উত্তরের মতো দেখায়।

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