একটি এসই পোস্টে শীর্ষ পাঁচটি মন্তব্য স্কোর দেখান


30

স্ট্যাক এক্সচেঞ্জের স্ক্রিপ্ট নির্ধারণ করে যে প্রশ্ন বা উত্তরের উপর কোন পাঁচটি মন্তব্য প্রাথমিকভাবে সাইটের মূল পৃষ্ঠায় তাদের আপভোম সংখ্যার মাধ্যমে দেখা যাবে; সর্বাধিক সংখ্যক ভোট সহ পাঁচটি মন্তব্য প্রদর্শিত হবে। আপনার কাজটি এই আচরণটি পুনরায় তৈরি করা।

STDIN, কমান্ড-লাইন আরগস বা ফাংশন আর্গুমেন্টগুলি প্রিন্ট করে বা শীর্ষ পাঁচটি মন্তব্যের স্কোর প্রদান করে একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন। ইনপুটটি কোনও পোস্টের মন্তব্যে upvotes এর সংখ্যা উপস্থাপন করে পূর্ণসংখ্যার একটি অ্যারে হবে। উদাহরণস্বরূপ, এর একটি ইনপুট

0, 2, 5, 4, 0, 1, 0

এর অর্থ হ'ল প্রথম মন্তব্যের কোনও ভোট নেই, দ্বিতীয়টির দুটি ভোট রয়েছে, তৃতীয়টির পাঁচটি রয়েছে, চতুর্থটি চারটি ছিল ইত্যাদি the মন্তব্য স্কোরের ক্রমটি আউটপুটে একই থাকতে হবে।

যদি ইনপুটটিতে পাঁচ বা তার চেয়ে কম কমেন্ট স্কোর থাকে তবে আউটপুটে প্রদত্ত হওয়া ছাড়া আর কিছুই থাকতে হবে না। যদি দুটি বা ততোধিক মন্তব্য স্কোর একই হয় তবে প্রথম স্কোরগুলি প্রদর্শিত হবে। আপনি ধরে নিতে পারেন ইনপুট অ্যারেটিতে কমপক্ষে একটি মন্তব্য স্কোর থাকবে।

আউটপুটে সংখ্যাগুলি সহজেই আলাদা করা উচিত (সুতরাং 1 কেস 0 এর জন্য অবৈধ)। অন্যথায় আউটপুট বিন্যাসে কোনও বিধিনিষেধ নেই; সংখ্যাগুলি কোনও স্থান বা নিউলাইন দ্বারা পৃথক করা যেতে পারে, বা এগুলি তালিকার বিন্যাসে হতে পারে ইত্যাদি

পরীক্ষার কেস:

[0, 2, 5, 4, 0, 1, 0] -> [0, 2, 5, 4, 1]
[2, 1, 1, 5, 3, 6] -> [2, 1, 5, 3, 6]
[0, 4, 5] -> [0, 4, 5]
[1, 1, 5, 1, 1, 5] -> [1, 1, 5, 1, 5]
[0, 2, 0, 0, 0, 0, 0, 0] -> [0, 2, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 0, 0] -> [0, 0, 0, 0, 1]
[5, 4, 2, 1, 0, 8, 7, 4, 6, 1, 0, 7] -> [5, 8, 7, 6, 7]
[6, 3, 2, 0, 69, 22, 0, 37, 0, 2, 1, 0, 0, 0, 5, 0, 1, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 2] -> [6, 69, 22, 37, 5]

সর্বশেষ উদাহরণটি স্ট্যাক ওভারফ্লো প্রশ্ন থেকে নেওয়া হয়েছিল ।

যদি সম্ভব হয় তবে দয়া করে আপনার পোস্টে একটি লিঙ্ক সরবরাহ করুন যেখানে আপনার জমাটি অনলাইনে চালানো যেতে পারে।

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। শুভকামনা!


আমাদের কি অর্ডার বজায় রাখতে হবে?
কনর ও'ব্রায়ান

@ C .O'Bʀɪᴇɴ হ্যাঁ পূর্ণসংখ্যার ক্রমটি যে ক্রমে প্রদর্শিত হবে তা পরিবর্তন করা উচিত নয়।
টিএনটি

উত্তর:


10

জেলি , 6 বাইট

NỤḣ5Ṣị

এটি অনলাইন চেষ্টা করুন! বা একবারে সমস্ত পরীক্ষার কেস যাচাই করুন

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

NỤḣ5Ṣị    Main link. Input: A (list)

N         Negate (multiply by -1) all elements of A.
 Ụ        Grade the result up.
          This consists in sorting the indices of A by their negated values.
          The first n indices will correspond to the n highest vote counts,
          tie-broken by order of appearance.
  ḣ5      Discard all but the first five items.
    Ṣ     Sort those indices.
          This is to preserve the comments' natural order.
     ị    Retrieve the elements of A at those indices.

10

পাইথন 2, 58 বাইট

x=input()[::-1]
while x[5:]:x.remove(min(x))
print x[::-1]

আইডিয়নে এটি পরীক্ষা করুন ।

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

list.removeসুনির্দিষ্ট তালিকা থেকে এর যুক্তি যদি প্রথম উপস্থিতি সরিয়ে দেয়। তালিকাটি এক্সের বিপরীতে , আমরা মূলত এটি অর্জন করি যে এটি এর পরিবর্তে শেষ ঘটনাটি সরিয়ে দেয় ।

সুতরাং, পাঁচটিরও বেশি মন্তব্যের একটি তালিকা না পৌঁছানো পর্যন্ত কমপক্ষে upvotes সহ মন্তব্যটি সরিয়ে রাখাই যথেষ্ট। এরপরে, আমরা মূল ক্রমটি পুনরুদ্ধার করতে আরও একবার তালিকার বিপরীত।


9

পাইথ, 11 বাইট

_.-_Q<SQ_5

আমরা Qপাঁচটি সর্বাধিক উপাদান Q(তারা যে ক্রমে প্রদর্শিত হবে ) এর সাথে ইনপুট ( ) এর মাল্টিসেট ছেদ গণনা করি Q, তারপরে প্রথম পাঁচটি নিয়ে যাই।

_ .-           Reverse of multiset difference
     _ Q       of reversed Q
     <         with all but last 5 elements of sorted Q
       S Q                   
       _ 5

এখানে চেষ্টা করুন


<5SQসমান <SQ_5, যা 1 বাইট সঞ্চয় করে।
পূর্কাকুডারী


মজাদার. আমি অবাক হই যে কেন এটি হিসাবে বাস্তবায়ন করা হয়নি b[:-a]... আমি মনে করি এটি এমনকি এমনও হতে পারে যে কোনও সময়।
পূর্কাকুডারী

5

এমএটিএল , 16 বাইট

tn4>?t_FT#S5:)S)

এটি বর্তমান প্রকাশ (10.2.1) ব্যবহার করে যা এই চ্যালেঞ্জের চেয়ে আগের is

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

ব্যাখ্যা

          % implicitly get input
t         % duplicate
n         % number of elements
4>?       % if greater than 4...
  t       % duplicate
  _       % unary minus (so that sorting will correspond to descending order)
  FT#S    % sort. Produce the indices of the sorting, not the sorted values
  5:)     % get first 5 indices
  S       % sort those indices, so that they correspond to original order in the input
  )       % index the input with those 5 indices
          % implicitly end if
          % implicitly display

5

জাভাস্ক্রিপ্ট, 74 65 62 61 বাইট

3 বাইট বন্ধ ধন্যবাদ @ ব্যবহারকারী 81655। 1 বাইট অফ থ্যাঙ্কস @ অ্যাপসিলার্স।

f=a=>5 in a?f(a.splice(a.lastIndexOf(Math.min(...a)),1)&&a):a


5

পাইথন 3, 76

9 টি বাইট সংরক্ষণ করা কেভিন আমাকে স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ যে কোনও লিখিত সংস্থায় বিবৃতি দেওয়া থাকলে আমি অপব্যবহার করতে পারি।

ডিএসএমকে 5 টি বাইট সংরক্ষণ করা হয়েছে।

এখনই খুব সহজ সমাধান। শীর্ষ 5 স্কোরটি ধরুন এবং তারপরে তালিকার মাধ্যমে পার্স করুন ফলাফল হিসাবে আমরা তাদের খুঁজে পাচ্ছি।

def f(x):y=sorted(x)[-5:];return[z for z in x if z in y and not y.remove(z)]

যদি কেউ এগুলি চায় তবে আমার পরীক্ষার মামলাগুলি এখানে রয়েছে:

assert f([0, 2, 5, 4, 0, 1, 0]) == [0, 2, 5, 4, 1]
assert f([2, 1, 1, 5, 3, 6]) == [2, 1, 5, 3, 6]
assert f([0, 4, 5]) == [0, 4, 5]
assert f([0, 2, 0, 0, 0, 0, 0, 0]) == [0, 2, 0, 0, 0]
assert f([0, 0, 0, 0, 1, 0, 0, 0, 0]) == [0, 0, 0, 0, 1]
assert f([5, 4, 2, 1, 0, 8, 7, 4, 6, 1, 0, 7]) == [5, 8, 7, 6, 7]
assert f([6, 3, 2, 0, 69, 22, 0, 37, 0, 2, 1, 0, 0, 0, 5, 0, 1, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 2]) == [6, 69, 22, 37, 5]

4

05 এ বি 1 ই , 12 11 বাইট

কোড:

E[Dg6‹#Rß\R

ব্যাখ্যা:

E           # Evaluate input
 [          # Infinite loop
  D         # Duplicate top of the stack
   g        # Get the length
    6‹#     # If smaller than 6, break
       R    # Reverse top of the stack
        ß\  # Extract the smallest item and remove it
          R # Reverse top of the stack
            # Implicit, print the processed array

সিপি-1252 এনকোডিং ব্যবহার করে।


4

সিজেম, 16 বাইট

{ee{1=~}$5<$1f=}

একটি নামবিহীন ব্লক (ফাংশন) যা অ্যারে নেয় এবং একটি অ্যারে প্রদান করে।

পরীক্ষা স্যুট.

ব্যাখ্যা

ee   e# Enumerate the array, pairing each number with its index.
{    e# Sort by...
 1=  e#   The original value of each element.
 ~   e#   Bitwise NOT to sort from largest to smallest.
}$   e# This sort is stable, so the order tied elements is maintained.
5<   e# Discard all but the first five.
$    e# Sort again, this time by indices to recover original order.
1f=  e# Select the values, discarding the indices.


3

পাইথন, 68 বাইট

lambda l,S=sorted:zip(*S(S(enumerate(l),key=lambda(i,x):-x)[:5]))[1]

উদাহরণ রান।

বিল্ট-ইনগুলির একটি গলদ। আমি মনে করি ব্যাখ্যা করার সর্বোত্তম উপায় হ'ল একটি উদাহরণ দিয়ে চালানো।

>> l
[5, 4, 2, 1, 0, 8, 7, 4, 6, 1, 0, 7]
>> enumerate(l)
[(0, 5), (1, 4), (2, 2), (3, 1), (4, 0), (5, 8), (6, 7), (7, 4), (8, 6), (9, 1), (10, 0), (11, 7)]

enumerateতালিকাটিকে সূচক / মান জোড়গুলিতে পরিণত করে (প্রযুক্তিগতভাবে কোনও enumerateবস্তু)।

>> sorted(enumerate(l),key=lambda(i,x):-x)
[(5, 8), (6, 7), (11, 7), (8, 6), (0, 5), (1, 4), (7, 4), (2, 2), (3, 1), (9, 1), (4, 0), (10, 0)]
>> sorted(enumerate(l),key=lambda(i,x):-x)[:5]
[(5, 8), (6, 7), (11, 7), (8, 6), (0, 5)]

জোড়াগুলি প্রথমে সর্বাধিক মান অনুসারে বাছাই করা হয়, তালিকার বর্তমান ক্রমকে রেখে order এটি প্রথম পোস্টে টাইব্রোকন, সর্বাধিক স্কোর মন্তব্য সামনে রাখে। তারপরে, 5 টির মতো সেরা মন্তব্য করা হয়।

>> sorted(_)
   [(0, 5), (5, 8), (6, 7), (8, 6), (11, 7)]
>> zip(*sorted(_))[1]
   (5, 8, 7, 6, 7)

শীর্ষস্থানীয় পাঁচটি মন্তব্য পোস্ট করার ক্রমে রেখে দিন এবং তারপরে কেবল স্কোরগুলি রেখে সূচকগুলি সরিয়ে ফেলুন।


3

পাওয়ারশেল ভি 4, 120 97 বাইট

param($a)$b=@{};$a|%{$b.Add(++$d,$_)};($b.GetEnumerator()|sort Value|select -l 5|sort Name).Value

চারপাশের পরীক্ষা-নিরীক্ষা করে, আমি একটি বিকল্প পদ্ধতির সন্ধান পেয়েছি যা কিছু অতিরিক্ত বাইট বন্ধ করে দেয়। তবে এটি পাওয়ারশেল v4 এর সাথে সুনির্দিষ্ট বলে মনে হচ্ছে এবং কীভাবে সংস্করণটি হ্যাশটেবলের বাছাই পরিচালনা করে - এটি ডিফল্টরূপে মনে হয় যে ভি 4-তে যদি একাধিক মানগুলির একই মান থাকে তবে এটি একটি "নিম্ন" কী সহ গ্রহণ করে তবে ভি 3 বা তার আগের বারের জন্য আপনি গ্যারান্টিযুক্ত নন, এমনকি ভি 3-তে অর্ডার করা কীওয়ার্ডটি ব্যবহার করার সময়ও । আচরণটি অব্যাহত থাকে কিনা তা বলার জন্য আমি পাওয়ারশেল ভি 5 এর বিরুদ্ধে পুরোপুরি এটি পরীক্ষা করেছি না।

এই ভি 4-শুধুমাত্র সংস্করণটি ইনপুট হিসাবে নেয় $a, তারপরে একটি নতুন খালি হ্যাশটেবল তৈরি করে $b। আমরা ইনপুটটির সমস্ত উপাদানগুলি লুপ করি $a|%{...}এবং প্রতিটি পুনরাবৃত্তিতে একটি কী / মান জুড়ি যুক্ত করি $b( $dপ্রতিটি পুনরাবৃত্তির জন্য কী হিসাবে একটি সহায়ক ভেরিয়েবল প্রি-ইনক্রিমেন্ট করে সম্পন্ন করা হয় )। তারপর আমরা sort $bউপর ভিত্তি করে Valueতারপর, AST , তারপর দ্বারা (অর্থাত, চাবি), এবং পরিশেষে আউটপুট শুধুমাত্র পরিসমাপ্তি হ্যাশ এর গুলি।select-l5sortName.Value

যদি 5 টিরও কম উপাদান প্রবেশ করানো হয় তবে এটি কেবলমাত্র মান অনুসারে বাছাই করবে, শেষ পাঁচটি নির্বাচন করুন (অর্থাত্ তাদের সবগুলি), কী এবং আউটপুটটিকে পুনরায় সাজান।


পুরানো, 120 বাইট, পূর্ববর্তী সংস্করণগুলিতে কাজ করে

param($a)if($a.Count-le5){$a;exit}[System.Collections.ArrayList]$b=($a|sort)[-5..-1];$a|%{if($_-in$b){$_;$b.Remove($_)}}

মরগান থ্র্যাপের উত্তর হিসাবে একই অ্যালগরিদম , যা সম্ভবত স্পষ্টতই ইঙ্গিত দেয় যে মহান মন একসাথে চিন্তা করে। :)

ইনপুট নেয়, আইটেমের সংখ্যা 5-এর চেয়ে কম বা সমান হয় কিনা তা পরীক্ষা করে এবং যদি ইনপুট আউটপুট দেয় এবং প্রস্থান করে। অন্যথায়, আমরা এর শীর্ষ পাঁচটি উপাদানের একটি অ্যারেলিস্ট তৈরি করি $b(অত্যধিক দীর্ঘায়িত [System.Collections.ArrayList]কাস্ট সহ) $a। তারপরে আমরা $aপ্রতিটি উপাদানটির পুনরাবৃত্তি করি এবং যদি এটির $bআউটপুট থাকে তবে এটি থেকে সরিয়ে ফেলা $b(এবং এখানে অ্যারেলিস্ট ব্যবহার করা আমাদের কেন প্রয়োজন, কারণ অ্যারে থেকে উপাদানগুলি সরিয়ে নেওয়া পাওয়ারশেলের কোনও সমর্থিত বৈশিষ্ট্য নয়, কারণ তারা প্রযুক্তিগতভাবে স্থির হয়ে গেছে সাইজ)।

-inঅপারেটরের জন্য v3 বা তার বেশি প্রয়োজন । পূর্ববর্তী সংস্করণগুলিতে কাজ করা একটি উত্তরের $_-in$bজন্য , $b-contains$_মোট 126 বাইটের জন্য স্যুইপ করুন


2

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

import Data.List
map snd.sort.take 5.sortOn((0-).snd).zip[0..] 

ব্যবহারের উদাহরণ: map snd.sort.take 5.sortOn((0-).snd).zip[0..] $ [5, 4, 2, 1, 0, 8, 7, 4, 6, 1, 0, 7]-> [5,8,7,6,7]

এটি কীভাবে কাজ করে: প্রতিটি সূচককে সূচক দিয়ে বাড়ানো, সাজানো সাজানো, প্রথমে 5 টি উপাদান নেওয়া, সূচী অনুসারে বাছাই করুন এবং সূচকটি সরান।


2

পিএইচপি 5, 107 102

@ ওয়াশিংটনগুয়েডসকে ধন্যবাদ 5 বাইট সংরক্ষণ করা

function p($s){uasort($s,function($a,$b){return$a<=$b;});$t=array_slice($s,0,5,1);ksort($t);return$t;}

Ungolfed

function p($scores) {
    // sort the array from high to low,
    // keeping lower array keys on top of higher
    // array keys
    uasort($scores,function($a, $b){return $a <= $b;});
    // take the top 5
    $top_five = array_slice($scores,0,5,1);
    // sort by the keys
    ksort($top_five);
    return $top_five;
}

চেষ্টা করে দেখুন


কারণ 1 1 5 1 1 5, আপনার জমাটি 1 5 1 1 5সঠিক পরিবর্তে একটি আউটপুট উত্পাদন করে 1 1 5 1 5
টিএনটি

এটি পিএইচপি 7.X এর জন্য আলাদা আচরণ করে বলে মনে হচ্ছে, পিএইচপি সংস্করণটি 5.6 বা নীচে স্যুইচ করুন।
স্যামস্কাঞ্চ

গেছ, সংস্করণ নম্বরটি লক্ষ্য করল না। :)
টিএনটি

আমি প্রথমে হয় নি। আমি নিশ্চিত নই কেন এটি কোডের পাশাপাশি সংস্করণটি কী ব্যবহার করে তা সংরক্ষণ করে না। আমি এটি নিশ্চিত নই কেন এটি 7.x এ সঠিকভাবে কাজ করে না।
স্যামসকাঞ্চ

পছন্দ করেছেন
স্যামস্কাঞ্চ

0

রুবি, 82 87 89 বাইট

$><<eval($*[0]).map.with_index{|x,i|[i,x]}.sort_by{|x|-x[1]}[0,5].sort.map(&:last)

কল করতে: ruby test.rb [1,2,2,3,4,5]

আসল জমা - 56 বাইট তবে নির্দিষ্ট পরীক্ষার ক্ষেত্রে ব্যর্থ হয় এবং স্টিডিন এবং স্টাডাউটকে সমর্থন করে না

_.reduce([]){|a,x|a+=_.sort.reverse[0..4]&[x]if !a[4];a}

ব্যাখ্যা

$><<               # print to stdout
eval($*[0])        # evals the passed in array in stdin ex: [1,2,3,4]
.map.with_index    # returns an enumerator with indices
{|x,i|[i,x]}       # maps [index,value]
.sort_by{|x|-x[1]} # reverse sorts by the value
[0,5]              # selects the first 5 values
.sort              # sorts item by index (to find the place)
.map{|x|x[1]}      # returns just the values

দুর্দান্ত প্রোগ্রাম। যদিও আপনাকে সে সম্পর্কে ওপিকে জিজ্ঞাসা করতে হতে পারে। আমি নিশ্চিত না যে ইনপুট ফর্ম্যাটটি ঠিক আছে।
Rɪᴋᴇʀ

@ রিকারডাব্লু এটি আসলে ব্যর্থ হয় যখন সর্বশেষ ইনডিসে নকল শীর্ষ # থাকে, আমি এখনই এটি সংশোধন করছি
জন

@ রিকারডাব্লু এখনই এটি স্থির হয়েছে, এবং এটি স্টাডিনকে সমর্থন করে এবং স্টাডাউটকে লিখেছে।
জন

ঠিক আছে. যদিও আমি ইনপুট পদ্ধতিটি পছন্দ করি। আমি কেবল এটি সম্পর্কে @ টিএনটিকে জিজ্ঞাসা করার জন্য বলছিলাম।
আর

0

জাভা 7, 155 বাইট

import java.util.*;List c(int[]f){LinkedList c=new LinkedList();for(int i:f)c.add(i);while(c.size()>5)c.removeLastOccurrence(Collections.min(c));return c;}

অবরুদ্ধ এবং পরীক্ষা-কোড:

এখানে চেষ্টা করুন।

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

class Main{
    static List c(int[] f){
        LinkedList c = new LinkedList();
        for (int i : f){
            c.add(i);
        }
        while(c.size() > 5){
            c.removeLastOccurrence(Collections.min(c));
        }
        return c;
    }

    public static void main(String[] a){
        System.out.println(Arrays.toString(c(new int[]{ 0, 2, 5, 4, 0, 1, 0 }).toArray()));
        System.out.println(Arrays.toString(c(new int[]{ 2, 1, 1, 5, 3, 6 }).toArray()));
        System.out.println(Arrays.toString(c(new int[]{ 0, 4, 5 }).toArray()));
        System.out.println(Arrays.toString(c(new int[]{ 1, 1, 5, 1, 1, 5 }).toArray()));
        System.out.println(Arrays.toString(c(new int[]{ 0, 2, 0, 0, 0, 0, 0, 0 }).toArray()));
        System.out.println(Arrays.toString(c(new int[]{ 0, 0, 0, 0, 1, 0, 0, 0, 0 }).toArray()));
        System.out.println(Arrays.toString(c(new int[]{ 6, 3, 2, 0, 69, 22, 0, 37, 0, 2, 1, 0, 0, 0, 5, 0, 1, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 2 }).toArray()));
    }
}

আউটপুট:

[0, 2, 5, 4, 1]
[2, 1, 5, 3, 6]
[0, 4, 5]
[1, 1, 5, 1, 5]
[0, 2, 0, 0, 0]
[0, 0, 0, 0, 1]
[6, 69, 22, 37, 5]

0

জুলিয়া, 48 বাইট

!x=x[find(sum(x.<x',2)+diag(cumsum(x.==x')).<6)]

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

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

মন্তব্য 1 মন্তব্য বেশী প্রাধান্য রয়েছে 2 নিম্নলিখিত সত্য এক iff:

  • সি 1 এর সি 2 এর চেয়ে বেশি upvotes রয়েছে ।
  • সি 1 এবং সি 2 এর সমপরিমাণ পরিমাণ একই পরিমাণে রয়েছে, তবে সি 1 আগে পোস্ট করা হয়েছিল।

এটি মন্তব্যের মোট ক্রম সংজ্ঞায়িত করে এবং সর্বাধিক নজরে রয়েছে এমন পাঁচটি মন্তব্য সন্ধান করা হাতের কাজ।

প্রাধান্য মন্তব্য (যা তাদের অর্ডার বদল করতে পারে, প্রতিটি মন্তব্যের জন্য বাছাই করার পরিবর্তে , আমরা মন্তব্য বড় বা সমান প্রাধান্য আছে গণনা। আমরা রাখা যদি এবং কেবল যদি এই গণনা হয় 5 বা তার কম।

আংশিকভাবে সংখ্যার অনুসারে মন্তব্যগুলিকে সাজানোর জন্য, আমরা নিম্নলিখিতটি করি the যাক এক্স কলাম ভোট গণনা ধারণকারী ভেক্টর হও। তারপর x'transposes এক্স - এইভাবে একটি সারি ভেক্টর তৈরি - এবং x.<x'একটি বুলিয়ান ম্যাট্রিক্স যে প্রতিটি উপাদান তুলনা সৃষ্টি এক্স প্রতিটি উপাদান দিয়ে এক্স টি

জন্য এক্স = [0, 2, 5, 4, 0, 1, 0] , এই দেয়

<     0      2      5      4      0      1      0
0 false   true   true   true  false   true  false
2 false  false   true   true  false  false  false
5 false  false  false  false  false  false  false
4 false  false   true  false  false  false  false
0 false   true   true   true  false   true  false
1 false   true   true   true  false  false  false
0 false   true   true   true  false   true  false

সারিগুলি জুড়ে (মাধ্যমে sum(...,2)) সংক্ষেপণ করে, আমরা সেই সূত্রের মন্তব্যের চেয়ে মন্তব্যগুলির সংখ্যা গণনা করি যা দৃ strictly ়ভাবে আরও বেশি আপগেট করে।

উদাহরণস্বরূপ ভেক্টরের জন্য, এটি দেয়

4
2
0
1
4
3
4

এরপরে, আমরা সমমানের পরিমাণের সাথে কমেন্টের সংখ্যা গণনা করি যে কমেন্টের চেয়ে আগে পোস্ট করা হয়েছিল। আমরা নিম্নলিখিত হিসাবে এটি অর্জন।

আমরা প্রথমে সঙ্গে একটি সমতা টেবিল তৈরী x.==x', যার উপাদান compraes এক্স এর উপাদানের সঙ্গে এক্স টি । আমাদের উদাহরণ ভেক্টরের জন্য, এটি দেয়:

=     0      2      5      4      0      1      0
0  true  false  false  false   true  false   true
2 false   true  false  false  false  false  false
5 false  false   true  false  false  false  false
4 false  false  false   true  false  false  false
0  true  false  false  false   true  false   true
1 false  false  false  false  false   true  false
0  true  false  false  false   true  false   true

এরপরে, আমরা cumsumম্যাট্রিক্সের প্রতিটি কলামের সংখ্যামূলক যোগফল গণনা করতে ব্যবহার করি ।

1  0  0  0  1  0  1
1  1  0  0  1  0  1
1  1  1  0  1  0  1
1  1  1  1  1  0  1
2  1  1  1  2  0  2
2  1  1  1  2  1  2
3  1  1  1  3  1  3

তির্যক ( diag) টি সমান পরিমাণে সমীক্ষা করে এমন মন্তব্যগুলির গণনা রাখে এবং সম্পর্কিত মন্তব্যের পরে আর হয় না।

1
1
1
1
2
1
3

আমরা উত্পাদিত দুটি সারি ভেক্টর যুক্ত করে, আমরা মন্তব্যগুলির অগ্রাধিকারগুলি ( 1 টি সর্বোচ্চ) is

5
3
1
2
6
4
7

1 থেকে 5 অবধি অগ্রাধিকার সহ মন্তব্যগুলি প্রদর্শন করা উচিত, তাই আমরা তাদের সূচকগুলি নির্ধারণ করি find(....<6)এবং সাথে সম্পর্কিত মন্তব্যগুলি পুনরুদ্ধার করি x[...]


0

পাইথন 3.5, 68 বাইট

f=lambda x,*h:x and x[:sum(t>x[0]for t in x+h)<5]+f(x[1:],*h,x[0]+1)

আমার পাইথন 2 উত্তরের জন্য কোনও মিল নেই , তবে পাইথন 3 এর বন্দরের চেয়ে মাত্র তিন বাইট বেশি, এবং আমি মনে করি এটি আকর্ষণীয় হওয়ার পক্ষে যথেষ্ট আলাদা।

আই / ও টিপলস আকারে। এটি repl.it পরীক্ষা করুন ।

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