แสดงคะแนนความคิดเห็นห้าอันดับแรกใน SE Post


30

สแต็กแลกเปลี่ยนสคริปต์กำหนดความคิดเห็นห้าข้อสำหรับคำถามหรือคำตอบในตอนแรกที่เห็นบนหน้าหลักของเว็บไซต์ผ่านจำนวน upvotes ที่พวกเขา; ห้าความคิดเห็นที่มีจำนวนคะแนนสูงสุดจะปรากฏขึ้น งานของคุณคือสร้างพฤติกรรมนี้ใหม่

เขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบโดยรับอินพุตผ่าน STDIN, บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและพิมพ์หรือส่งคืนคะแนนความคิดเห็นห้าอันดับแรก การป้อนข้อมูลจะเป็นอาร์เรย์ของจำนวนเต็มแทนจำนวน upvotes ในความคิดเห็นของบางโพสต์ ตัวอย่างเช่นอินพุตของ

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

หมายความว่าความคิดเห็นแรกไม่มีการลงคะแนนเสียงความคิดเห็นที่สองมีสองคะแนนที่สามมีห้าคะแนนที่สี่มีสี่คะแนนลำดับของคะแนนความคิดเห็นควรยังคงเหมือนเดิมในผลลัพธ์

หากอินพุตมีคะแนนข้อคิดเห็นอย่างน้อยห้าคะแนนผลลัพธ์จะไม่มีสิ่งใดเกินกว่าที่ได้รับ หากคะแนนความคิดเห็นตั้งแต่สองคะแนนขึ้นไปเหมือนกันคะแนนแรกควรปรากฏขึ้น คุณอาจสมมติว่าอาร์เรย์ข้อมูลเข้าจะมีคะแนนความคิดเห็นอย่างน้อยหนึ่งคะแนน

ตัวเลขในเอาต์พุตควรแยกความแตกต่างได้ง่าย (ดังนั้น 02541 สำหรับกรณีที่ 1 ไม่ถูกต้อง) มิฉะนั้นจะไม่มีข้อ จำกัด ในรูปแบบเอาต์พุต ตัวเลขอาจคั่นด้วยช่องว่างหรือขึ้นบรรทัดใหม่หรืออาจอยู่ในรูปแบบรายการเป็นต้น

กรณีทดสอบ:

[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]

ตัวอย่างที่ผ่านมาถูกนำมาจากคำถามนี้กองมากเกิน

หากเป็นไปได้โปรดระบุลิงก์ในโพสต์ของคุณซึ่งการส่งของคุณสามารถทำงานออนไลน์ได้

นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ โชคดี!


เราจะต้องรักษาความสงบเรียบร้อยหรือไม่
Conor O'Brien

@ 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

Python 2, 58 ไบต์

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

ทดสอบบนIdeone

มันทำงานอย่างไร

list.removeเอาเหตุการณ์ที่เกิดขึ้นครั้งแรกถ้าอาร์กิวเมนต์ของมันจากรายการที่ระบุ โดยการย้อนกลับรายการxเราจะประสบความสำเร็จเป็นหลักในการลบเหตุการณ์ล่าสุดแทน

ดังนั้นจึงพอเพียงที่จะลบความคิดเห็นด้วยจำนวน upvotes ที่น้อยที่สุดจนกว่าจะถึงรายการความคิดเห็นไม่เกินห้าความคิดเห็น หลังจากนั้นเรากลับรายการอีกครั้งเพื่อเรียกคืนคำสั่งซื้อเดิม


9

Pyth, 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 ไบต์
PurkkaKoodari


น่าสนใจ ฉันสงสัยว่าทำไมมันจึงไม่สามารถใช้งานได้ในขณะที่b[:-a]... ฉันคิดว่ามันอาจจะเป็นแบบนั้นก็ได้
PurkkaKoodari

5

MATL , 16 ไบต์

tn4>?t_FT#S5:)S)

สิ่งนี้ใช้รีลีสปัจจุบัน (10.2.1)ซึ่งเร็วกว่าความท้าทายนี้

ลองออนไลน์!

คำอธิบาย

          % 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

JavaScript, 74 65 62 61 ไบต์

ปิด 3 ไบต์ขอบคุณ @ user81655 1 ไบต์ปิดขอบคุณ @apsillers

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


5

Python 3, 76

บันทึกไปแล้ว 9 ไบต์ขอบคุณเควินเตือนฉันว่าฉันสามารถทำผิดถ้างบในรายการคอมพ์

บันทึก 5 ไบต์ด้วย DSM

ทางออกที่ง่ายสวยในตอนนี้ คว้าคะแนนสูงสุด 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

05AB1E , 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

ใช้การเข้ารหัส CP-1252


4

CJam, 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

Python ขนาด 68 ไบต์

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

ตัวอย่างการวิ่ง

ก้อนของตัว -ins ฉันคิดว่าวิธีที่ดีที่สุดในการอธิบายคือใช้ตัวอย่าง

>> 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)]

ทั้งคู่จะถูกเรียงลำดับตามค่าที่มากที่สุดก่อนโดยรักษาลำดับของดัชนีปัจจุบันสำหรับความสัมพันธ์ สิ่งนี้ทำให้ความเห็นที่ได้คะแนนสูงที่สุดอยู่ข้างหน้าโดยการโพสต์ก่อนหน้า จากนั้นจึงนำความคิดเห็นที่ดีที่สุด 5 ข้อ

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

ใส่ความคิดเห็นห้าอันดับแรกกลับไปในลำดับการโพสต์แล้วลบดัชนีโดยเก็บคะแนนเท่านั้น


3

PowerShell v4, 120 97 ไบต์

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

จากการทดลองรอบ ๆ ฉันพบวิธีสำรองที่เพิ่มจำนวนไบต์เพิ่มเติม อย่างไรก็ตามดูเหมือนว่าจะเฉพาะเจาะจงกับ PowerShell v4 และวิธีที่รุ่นนั้นจัดการการเรียงลำดับของ hashtable - ตามค่าเริ่มต้นแล้วใน v4 หากค่าหลายค่ามีค่าเท่ากันจะใช้คีย์ที่มี "ต่ำ" แต่ คุณไม่รับประกันว่าใน v3 หรือก่อนหน้าแม้ว่าจะใช้คำหลักที่สั่งซื้อใน v3 ฉันไม่ได้ตรวจสอบอย่างเต็มที่กับ PowerShell v5 เพื่อพูดว่าพฤติกรรมดังกล่าวดำเนินการต่อหรือไม่

รุ่น v4 เดียวนี้จะเข้าเป็น$aแล้วสร้าง $bHashtable เราวนรอบองค์ประกอบทั้งหมดของอินพุต$a|%{...}และการวนซ้ำแต่ละครั้งเพิ่มคู่คีย์ / ค่าให้กับ$b(ทำโดยการเพิ่มตัวแปรตัวช่วย$dเป็นคีย์สำหรับการทำซ้ำแต่ละครั้งล่วงหน้า) จากนั้นเราก็sort $bขึ้นอยู่กับValueแล้วselect-l AST 5แล้วsortโดยName(กล่าวคือกุญแจสำคัญใน) และในที่สุดก็ส่งออกเฉพาะ.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($_)}}

อัลกอริทึมเช่นเดียวกับของ Morgan Thrapp คำตอบซึ่งเห็นได้ชัดว่าเป็นสัญญาณบ่งชี้ว่าจิตใจที่ดีคิดเหมือนกัน :)

รับอินพุตตรวจสอบว่าจำนวนรายการน้อยกว่าหรือเท่ากับ 5 หรือไม่และหากเป็นเช่นนั้นจะให้สัญญาณเข้าและออก มิฉะนั้นเราสร้าง ArrayList $b(ที่มีความยาวมากเกินไป[System.Collections.ArrayList]หล่อ) $aของด้านบนห้าองค์ประกอบของ จากนั้นเราก็ย้ำกว่า$aและสำหรับแต่ละองค์ประกอบถ้ามันอยู่ในนั้น$bเราจะเอาออกมาแล้วลบออกจาก$b(และนี่คือเหตุผลที่เราจำเป็นต้องใช้ ArrayList เนื่องจากการลบองค์ประกอบจาก Array นั้นไม่ใช่คุณสมบัติที่ได้รับการสนับสนุนใน PowerShell ขนาด).

ต้องการ v3 หรือสูงกว่าสำหรับ-inผู้ปฏิบัติงาน สำหรับคำตอบที่ทำงานในรุ่นก่อนหน้าแลกเปลี่ยน$_-in$bสำหรับ$b-contains$_รวมเป็น126 ไบต์


2

Haskell, 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

PHP 5, 107 102

บันทึก 5 ไบต์ด้วย @WashingtonGuedes

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
TNT

ดูเหมือนว่าพฤติกรรมจะแตกต่างกันสำหรับ PHP 7.X เปลี่ยนเวอร์ชัน PHP เป็น 5.6 หรือต่ำกว่า
Samsquanch

Gotcha ไม่ได้สังเกตหมายเลขเวอร์ชัน :)
TNT

ตอนแรกฉันไม่ได้ทำอะไรเลย ฉันไม่แน่ใจว่าทำไมถึงไม่บันทึกรุ่นที่ใช้และรหัส ฉันเองก็ไม่แน่ใจเหมือนกันว่าทำไมมันจึงใช้งานไม่ได้กับ 7.X
Samsquanch

@WashingtonGuedes การลบช่องว่างช่วยฉัน 5 ไบต์ แต่ฉันไม่เห็นอัฒภาคที่ไม่จำเป็นที่จะไม่เกิดข้อผิดพลาด?
Samsquanch

0

Ruby, 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 ไบต์ แต่ล้มเหลวในบางกรณีการทดสอบ & ไม่สนับสนุน $ stdin และ $ stdout

_.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

โปรแกรมที่ดี คุณอาจต้องถาม OP เกี่ยวกับเรื่องนั้น ฉันไม่แน่ใจว่ารูปแบบอินพุตไม่เป็นไร
Rɪᴋᴇʀ

@RikerW มันล้มเหลวจริง ๆ เมื่อมี # top ที่ซ้ำกันในดัชนีสุดท้ายฉันกำลังแก้ไขตอนนี้
จอห์น

@RikerW แก้ไขแล้วและสนับสนุน stdin และเขียนไปยัง stdout
จอห์น

ถูก ฉันชอบวิธีการป้อนข้อมูลแม้ว่า ฉันแค่บอกว่าจะถาม @TNT เกี่ยวกับเรื่องนี้
Rɪᴋᴇʀ

0

Java 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;}

Ungolfed & test-code:

ลองที่นี่

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

Julia, 48 ไบต์

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

ลองออนไลน์!

มันทำงานอย่างไร

ความคิดเห็นc 1มีความสำคัญสูงกว่าความคิดเห็นc 2 iff ข้อใดข้อหนึ่งต่อไปนี้เป็นจริง:

  • 1มี upvotes มากกว่า 2
  • c 1และc 2มีจำนวน upvotes เท่ากัน แต่c 1ถูกโพสต์ก่อนหน้านี้

สิ่งนี้กำหนดการเรียงลำดับความคิดเห็นทั้งหมดและภารกิจในมือคือการค้นหาความคิดเห็นห้ารายการที่มีลำดับความสำคัญสูงสุด

แทนการเรียงลำดับการแสดงความคิดเห็นถึงความเป็นผู้นำ (ซึ่งจะปรับเปลี่ยนการสั่งซื้อของพวกเขาสำหรับการแสดงความคิดเห็นแต่ละเราจะนับการแสดงความคิดเห็นที่มีมากหรือมีความสำคัญเท่าเทียมกัน. เราเก็บและถ้าหากนับเป็น5หรือน้อยกว่า

ในการจัดเรียงความคิดเห็นบางส่วนตามจำนวนผู้ติดตามเราดำเนินการดังต่อไปนี้ ให้xเป็นเวกเตอร์คอลัมน์ที่มีการนับคะแนน จากนั้นx'transposes x - ดังนั้นการสร้างเวกเตอร์แถว - และx.<x'สร้างเมทริกซ์บูลีนที่เปรียบเทียบแต่ละองค์ประกอบของxกับแต่ละองค์ประกอบของx T T

สำหรับ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)) เราจะนับจำนวนความคิดเห็นที่มีการเพิ่มขึ้นอย่างเข้มงวดมากกว่าความคิดเห็นที่ดัชนีนั้น

สำหรับเวกเตอร์ตัวอย่างนี่ให้

4
2
0
1
4
3
4

ต่อไปเราจะนับจำนวนความคิดเห็นที่มีจำนวน upvotes เท่ากันซึ่งโพสต์ไว้ก่อนหน้าความคิดเห็นนั้น เราบรรลุสิ่งนี้ดังนี้

ครั้งแรกที่เราสร้างตารางเท่าเทียมกับx.==x'ที่ compraes องค์ประกอบของxกับองค์ประกอบของx T สำหรับเวกเตอร์ตัวอย่างของเราสิ่งนี้ให้:

=     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คือค่าสูงสุด) ของความคิดเห็น

5
3
1
2
6
4
7

ความคิดเห็นที่มีลำดับความสำคัญตั้งแต่1ที่จะ5ควรจะแสดงเพื่อให้เราตรวจสอบดัชนีของพวกเขาด้วยและเรียกความคิดเห็นที่สอดคล้องกันด้วยfind(....<6)x[...]


0

Python 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)

ไม่มีคำตอบสำหรับPython 2 ของฉันแต่มีความยาวมากกว่าสามพอร์ตถึง Python 3 เท่านั้นและฉันคิดว่ามันต่างกันพอที่จะน่าสนใจ

I / O อยู่ในรูปของ tuples ทดสอบบนrepl.it

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.