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

Adám
sumber

Jawaban:

5

Jelly , 5 byte

Ġị§§M

Cobalah online!

Indeks berbasis 1 dari elemen input unik yang diurutkan.

Erik the Outgolfer
sumber
3
WOHA, yang adalah singkat.
Adám
4

Pyth , 9 byte

-1 terima kasih kepada FryAmTheEggman!

{s.MssZ.g

Cobalah online!

Tuan Xcoder
sumber
1
Final ktidak perlu. .M*sZ/QZ{Tampaknya juga menjadi solusi yang sama panjangnya.
FryAmTheEggman
1
@FryAmTheEggman Oh lol, bagaimana saya lupa tentang pelengkapan otomatis? Terima kasih banyak!
Tn. Xcoder
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.

menggali semua
sumber
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!

betseg
sumber
2

Haskell, 60 byte

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

Mengembalikan daftar baris.

nimi
sumber
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
Neil
sumber
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}};
David G. Stork
sumber
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!

Arnauld
sumber
1

Groovy , 76 byte

{l->m=l.toSet().sort().collect{it.sum()*l.count(it)}
m.collect{it==m.max()}}

Cobalah online!

Kembali sebagai booleans dalam urutan

Khusus ASCII
sumber
1

Scala , 63 byte

l=>{var m=l.distinct.map(n=>n.sum*l.count(n==))
m.map(m.max==)}

Cobalah online!

Mengembalikan boolean dalam urutan penampilan

Khusus ASCII
sumber
1

Python 2 , 81 78 byte

lambda a:{u for u in a if a.count(u)*sum(u)==max(a.count(t)*sum(t)for t in a)}

Cobalah online!

3 byte thx ke Black Owl Kai .

Diberikan koleksi tupel, output adalah satu set tupel yang memiliki properti maksimal yang diinginkan.

Chas Brown
sumber
78 byte
Black Owl Kai
@ Black Owl Kai: thx! Aku merindukan itu ...
Chas Brown
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.

Perwujudan Ketidaktahuan
sumber
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

ngn
sumber
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]]
Kevin Cruijssen
sumber
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
Kucing Bisnis
sumber
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?
Bubbler
sumber