Baris yang paling berkontribusi


17

Diberikan matriks non-kosong dari bilangan bulat non-negatif, jawab baris unik mana yang paling berkontribusi terhadap jumlah total elemen dalam matriks.

Jawab dengan indikasi yang masuk akal, misalnya topeng dari urutan deretan penampilan yang unik (atau urutan sortir), atau indeks (berdasarkan nol atau satu) dari mereka, atau submatrix yang terdiri dari baris (dalam urutan apa pun) atau beberapa semacam kamus konstruksi ... - tetapi jelaskan!

Contohnya

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

Baris unik adalah [1,2,3],, [2,0,4]dan [6,3,0]masing-masing masing-masing menyumbang 6, 6, dan 9 setiap kali mereka muncul. Namun, mereka muncul satu kali, tiga kali dan dua kali masing-masing, sehingga semua kejadian masing-masing berkontribusi 6, 18, dan 18 untuk total (42), sehingga dua baris terakhir adalah yang paling berkontribusi. Karena itu jawaban yang valid adalah:

[false,true,true] sembunyikan dalam penampilan / urutan urut atau
[1,2]/ [2,3] nol / indeks berbasis satu di atas atau
[[2,0,4],[6,3,0]] baris aktual


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

[false,false,true](urutan tampilan) / [false,true,false](urutan urutan)
[2]/ [3](urutan tampilan) / [1]/ [2](urutan urutan)
[[2,3]]

Jawaban:




4

R , 64 byte

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

Cobalah online!

Mengembalikan vektor boolean dengan TRUE / FALSE dalam urutan sortir (leksikografis).
Baris unik ditampilkan sebagai nama vektor, sehingga mudah untuk mengidentifikasi yang paling berkontribusi.


3

Python 3 , 153 145 129 byte

-8 byte terima kasih kepada @Mr. Xcoder!

from itertools import*
def f(l):a=[[sum(map(sum,[*s])),k]for k,s in groupby(sorted(l))];return[v[1]for v in a if v[0]==max(a)[0]]

Cobalah online!


2

Haskell, 60 byte

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

Mengembalikan daftar baris.


2

Arang , 25 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Format output default adalah setiap elemen baris pada barisnya sendiri dan baris spasi ganda. Penjelasan:

  θ                         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

Mathematica, 48 byte

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

atau

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

dimana (misalnya)

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
Anda dapat menggunakan steno dan menghapus spasi untuk menghemat byte:SortBy[Gather@m,Total@*Flatten][[-1,1]]
Gagang Pintu

1
Ini sepertinya mengambil input dari variabel yang telah ditentukan, yang tidak diizinkan . Kiriman harus program atau fungsi lengkap secara default.
Dennis

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

Ini tidak valid; hanya mengembalikan salah satu baris dengan nilai terbesar daripada semuanya.
lirtosiast

1

JavaScript (ES6), 88 byte

Output array nilai Boolean dalam urutan tampilan.

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)

Cobalah online!








0

C # (Visual C # Interactive Compiler) , 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();}

Cobalah online!

Sebagian besar kode ini dihabiskan untuk mengambil semua nilai duplikat, karena pembanding default untuk daftar tidak membandingkan nilai-nilai di dalam daftar. Itu berarti saya tidak bisa menggunakanDistinct() , GroupBy(), atau Containsuntuk menyaring daftar.


0

K (ngn / k) , 17 byte

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

Cobalah online!

{ } berfungsi dengan argumen x

=x grup - bentuk kamus di mana kunci adalah baris dan nilainya adalah daftar indeks mereka dalam matriks

x@indeks matriks asli dengan itu. hasilnya lagi kamus dengan baris sebagai kunci. nilainya beberapa salinan dari kunci yang sesuai

+//' jumlah hingga masing-masing konvergensi (hanya bertindak pada nilai-nilai; kunci tetap seperti apa adanya)

a: menetapkan ke a

|/ maksimum (dari nilai-nilai)

a=|/a kamus baris-ke-boolean yang paling banyak berkontribusi bagi baris

& "where", yaitu kunci mana yang sesuai dengan nilai 1



0

05AB1E , 10 9 byte

ês{γOOZQÏ

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

ê          # 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

ȯẋ_¦Σ¦:⌉=¦

Cobalah online!

Karena Gaia tidak menerima daftar melalui input dengan sangat mudah, ini adalah fungsi yang menerima daftar dari atas dari atas tumpukan dan meninggalkan hasilnya di atas (sebagai topeng urutan diurutkan).

ȯ           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/.~

Cobalah online!

Kata kerja monadik yang memberikan hasil boolean dalam urutan penampilan.

Bagaimana itu bekerja

[:(=>./)+/^: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?
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.