Hàng đóng góp nhiều nhất


17

Đưa ra một ma trận không rỗng gồm các số nguyên không âm, trả lời các hàng duy nhất đóng góp nhiều nhất vào tổng các phần tử trong ma trận.

Trả lời bằng bất kỳ dấu hiệu hợp lý nào, ví dụ: mặt nạ của thứ tự xuất hiện hàng duy nhất (hoặc thứ tự sắp xếp) hoặc chỉ số (không hoặc dựa trên một) của những thứ đó, hoặc một hàm con bao gồm các hàng (theo bất kỳ thứ tự nào) hoặc một số loại từ điển xây dựng - nhưng hãy giải thích nó!

Ví dụ

[[1,2,3],[2,0,4],[6,3,0],[2,0,4],[6,3,0],[2,0,4]]:

Các hàng duy nhất là [1,2,3], [2,0,4][6,3,0]mỗi lần lượt đóng góp 6, 6 và 9 mỗi lần chúng xảy ra. Tuy nhiên, chúng xảy ra một lần, ba lần và hai lần, vì vậy tất cả các lần xuất hiện tương ứng của chúng đóng góp 6, 18 và 18 vào tổng số (42), vì vậy hai hàng sau là những đóng góp nhiều nhất. Do đó, câu trả lời hợp lệ là:

[false,true,true] mặt nạ xuất hiện / thứ tự sắp xếp hoặc
[1,2]/ [2,3] zero chỉ số / one dựa trên những điều trên hoặc
[[2,0,4],[6,3,0]] các hàng thực tế


[[1,2],[3,1],[2,3],[1,2],[3,1],[2,3],[1,2]]

[false,false,true](theo thứ tự xuất hiện) / [false,true,false](thứ tự sắp xếp)
[2]/ [3](xuất hiện theo thứ tự) / [1]/ [2](thứ tự sắp xếp)
[[2,3]]

Câu trả lời:




4

R , 64 byte

function(M)max(x<-tapply(rowSums(M),apply(M,1,toString),sum))==x

Hãy thử trực tuyến!

Trả về một vectơ boolean với TRUE / FALSE theo thứ tự sắp xếp (từ điển).
Các hàng duy nhất được hiển thị dưới dạng tên vector, vì vậy thật dễ dàng để xác định những người đóng góp nhiều nhất.



2

Haskell, 60 byte

import Data.Lists
f x=nub$argmaxes(\e->sum e*countElem e x)x

Trả về một danh sách các hàng.


2

Than , 25 byte

IΦθ∧⁼κ⌕θι⁼×№θιΣι⌈Eθ×№θλΣλ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Định dạng đầu ra mặc định là mỗi phần tử hàng trên dòng riêng và hàng cách nhau hai lần. Giải trình:

  θ                         Input array
 Φ                          Filtered where
     κ                      Current index
    ⁼                       Equals
      ⌕                     First index of
        ι                   Current row
       θ                    In input array
   ∧                        Logical And
           №                Count of
             ι              Current row
            θ               In input array
          ×                 Multiplied by
              Σ             Sum of
               ι            Current row
         ⁼                  Equals
                ⌈           Maximum of
                  θ         Input array
                 E          Mapped over rows
                    №       Count of
                      λ     Current row
                     θ      In input array
                   ×        Multiplied by
                       Σ    Sum of
                        λ   Current row
I                           Cast to string
                            Implicitly printed

2

Toán học, 48 byte

Last[SortBy[Gather[m], Total[Flatten[#]] &]][[1]]

hoặc là

TakeLargestBy[Gather[m], Total[#, 2] &, 1][[1, 1]]

trong đó (ví dụ)

m = {{1, 2, 3}, {2, 0, 4}, {7, 9, 5}, {6, 3, 0}, {2, 0, 4}, 
     {6, 3, 0}, {2, 0, 4}, {7, 9, 5}};

2
Bạn có thể sử dụng tốc ký và xóa khoảng trắng để lưu byte:SortBy[Gather@m,Total@*Flatten][[-1,1]]
Doorknob

1
Điều này có vẻ như nó lấy đầu vào từ một biến được xác định trước, không được phép . Đệ trình phải là chương trình đầy đủ hoặc chức năng theo mặc định.
Dennis

TakeLargestBy[Gather[m], Total[#, 2] &, 1][[1, 1]] /@ m
David G. Cò

Điều này không hợp lệ; nó chỉ trả về một trong các hàng có giá trị lớn nhất chứ không phải tất cả chúng.
lirtosiast

1

JavaScript (ES6), 88 byte

Xuất ra một mảng các giá trị Boolean theo thứ tự xuất hiện.

m=>m.map(h=o=r=>h=(v=o[r]=~~o[r]+eval(r.join`+`))<h?h:v)&&Object.keys(o).map(x=>o[x]==h)

Hãy thử trực tuyến!








0

C # (Trình biên dịch tương tác Visual C #) , 126 byte

n=>{var i=n.OrderBy(a=>a.Sum()*n.Count(a.SequenceEqual));return i.Where((a,b)=>i.Take(b).Count(a.SequenceEqual)<1).Reverse();}

Hãy thử trực tuyến!

Hầu hết các mã này được dành để lấy ra tất cả các giá trị trùng lặp, vì bộ so sánh mặc định cho danh sách không so sánh các giá trị bên trong danh sách. Điều đó có nghĩa rằng tôi không thể sử dụng Distinct(), GroupBy()hoặc Containsđể lọc danh sách.


0

K (ngn / k) , 17 byte

{&a=|/a:+//'x@=x}

Hãy thử trực tuyến!

{ } chức năng với đối số x

=x nhóm - tạo thành một từ điển trong đó các khóa là hàng và các giá trị là danh sách các chỉ số của chúng trong ma trận

x@lập chỉ mục ma trận gốc với điều đó. kết quả lại là một từ điển với các hàng làm khóa. các giá trị là nhiều bản sao của khóa tương ứng

+//' tổng cho đến khi hội tụ từng cái (chỉ hoạt động trên các giá trị; các khóa vẫn giữ nguyên)

a: giao cho a

|/ tối đa (của các giá trị)

a=|/a một từ điển hàng-to-boolean trong đó các hàng đóng góp nhiều nhất

& "where", nghĩa là các phím tương ứng với các giá trị của 1



0

05AB1E , 10 9 byte

ês{γOOZQÏ

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

ê          # Sort and uniquify the (implicit) input list of lists
           #  i.e. [[2,0,4],[1,2,3],[6,3,0],[2,0,4],[6,3,0],[2,0,4]]
           #   → [[1,2,3],[2,0,4],[6,3,0]]
 s         # Swap so the (implicit) input list of lists is at the top again
  {        # Sort it
           #  i.e. [[2,0,4],[1,2,3],[6,3,0],[2,0,4],[6,3,0],[2,0,4]]
           #   → [[1,2,3],[2,0,4],[2,0,4],[2,0,4],[6,3,0],[6,3,0]]
   γ       # Group the sorted list of lists
           #  i.e. [[1,2,3],[2,0,4],[2,0,4],[2,0,4],[6,3,0],[6,3,0]]
           #   → [[[1,2,3]],[[2,0,4],[2,0,4],[2,0,4]],[[6,3,0],[6,3,0]]]
    O      # Take the sum of each inner-most lists
           #  i.e. [[[1,2,3]],[[2,0,4],[2,0,4],[2,0,4]],[[6,3,0],[6,3,0]]]
           #   → [[6],[6,6,6],[9,9]]
     O     # Take the sum of each inner list
           #  i.e. [[6],[6,6,6],[9,9]] → [6,18,18]
      Z    # Get the max (without popping the list of sums)
           #  i.e. [6,18,18] → 18
       Q   # Check for each if this max is equal to the sum
           #  i.e. [6,18,18] and 18 → [0,1,1]
        Ï  # Filter the uniquified list of lists on truthy values (and output implicitly)
           #  i.e. [[1,2,3],[2,0,4],[6,3,0]] and [0,1,1] → [[2,0,4],[6,3,0]]

0

Gaia , 10 byte

ȯẋ_¦Σ¦:⌉=¦

Hãy thử trực tuyến!

Vì Gaia không chấp nhận danh sách thông qua đầu vào rất dễ dàng, đây là chức năng chấp nhận danh sách từ đầu từ trên cùng của ngăn xếp và để kết quả lên trên cùng (dưới dạng mặt nạ theo thứ tự được sắp xếp).

ȯ           Sort the list
 ẋ          Split it into runs of the same element (in this case, runs of the same row)
  _¦        Flatten each sublist
    Σ¦      Sum each sublist
      :⌉    Find the maximum sum
        =¦  Compare each sum for equality with the maximum

0

J , 16 byte

[:(=>./)+/^:2/.~

Hãy thử trực tuyến!

Một động từ đơn âm cho kết quả boolean theo thứ tự xuất hiện.

Làm thế nào nó hoạt động

[:(=>./)+/^:2/.~
             /.~  Self-classify; collect identical rows in appearance order
                  For each collected rows (= a matrix),
        +/^:2       Sum all the elements into one value
[:(=>./)          Compute the boolean vector:
    >./             Is the max of the array
   =                equal to this element?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.