Am meisten beitragende Zeilen

17

Beantworten Sie bei einer nicht leeren Matrix nicht negativer Ganzzahlen, welche eindeutigen Zeilen am meisten zur Gesamtsumme der Elemente in der Matrix beitragen.

Beantworten Sie die Fragen mit einem vernünftigen Hinweis, z. B. einer Maske mit der eindeutigen Reihenfolge des Erscheinungsbilds (oder der Sortierreihenfolge) oder Indizes (null- oder einsbasiert) oder einer Untermatrix, die aus den Zeilen (in beliebiger Reihenfolge) oder einigen besteht Art Wörterbuchkonstrukt… - aber erkläre es!

Beispiele

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

Die einzigartigen Reihen sind [1,2,3], [2,0,4]und die [6,3,0]jeweils einen Beitrag 6, 6 und 9 jedesmal , wenn sie auftreten. Sie treten jedoch einmal, dreimal bzw. zweimal auf, sodass alle ihre jeweiligen Vorkommen 6, 18 und 18 zur Gesamtsumme (42) beitragen, sodass die beiden letztgenannten Zeilen am meisten beitragen. Gültige Antworten sind daher:

[false,true,true] Maske in Aussehen / Sortierreihenfolge oder
[1,2]/ [2,3] null / eins-basierten Indizes der obigen oder
[[2,0,4],[6,3,0]] der tatsächlichen Zeilen


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

[false,false,true](Erscheinungsreihenfolge) / [false,true,false](Sortierreihenfolge)
[2]/ [3](Erscheinungsreihenfolge) / [1]/ [2](Sortierreihenfolge)
[[2,3]]

Adam
quelle

Antworten:

4

Pyth , 9 Bytes

-1 danke an FryAmTheEggman!

{s.MssZ.g

Probieren Sie es online!

Mr. Xcoder
quelle
1
Das Finale kist nicht nötig. Auch .M*sZ/QZ{scheint dann eine gleiche Länge Lösung.
FryAmTheEggman
1
@FryAmTheEggman Oh lol, wie habe ich die automatische Vervollständigung vergessen? Danke vielmals!
Mr. Xcoder
4

R , 64 Bytes

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

Probieren Sie es online!

Gibt einen booleschen Vektor mit TRUE / FALSE in Sortierreihenfolge zurück (lexikografisch).
Die eindeutigen Zeilen werden als Vektornamen angezeigt, sodass die am meisten beitragenden Zeilen leicht identifiziert werden können.

digEmAll
quelle
3

Python 3 , 153 145 129 Bytes

-8 Bytes dank @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]]

Probieren Sie es online!

betseg
quelle
2

Haskell, 60 Bytes

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

Gibt eine Liste der Zeilen zurück.

nimi
quelle
2

Holzkohle , 25 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Das Standardausgabeformat ist jedes Zeilenelement in einer eigenen Zeile und Zeilen mit doppeltem Abstand. Erläuterung:

  θ                         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
quelle
2

Mathematica, 48 Bytes

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

oder

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

wo (zum Beispiel)

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
quelle
2
Sie können die Kurzschrift verwenden und Leerzeichen entfernen, um Bytes zu speichern:SortBy[Gather@m,Total@*Flatten][[-1,1]]
Türklinke
1
Dies sieht so aus, als würde eine vordefinierte Variable verwendet, die nicht zulässig ist . Die Einsendungen müssen standardmäßig vollständig programmiert sein oder funktionieren.
Dennis
TakeLargestBy[Gather[m], Total[#, 2] &, 1][[1, 1]] /@ m
David G. Stork
Dies ist nicht gültig; Es wird nur eine der Zeilen mit den höchsten Werten zurückgegeben, nicht alle.
Lirtosiast
1

JavaScript (ES6), 88 Byte

Gibt ein Array mit Booleschen Werten in Darstellungsreihenfolge aus.

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)

Probieren Sie es online!

Arnauld
quelle
1

Groovy , 76 Bytes

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

Probieren Sie es online!

Gibt als Boolesche Werte in Sortierreihenfolge zurück

Nur ASCII
quelle
1

Scala , 63 Bytes

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

Probieren Sie es online!

Gibt Boolesche Werte in Darstellungsreihenfolge zurück

Nur ASCII
quelle
1

Python 2 , 81 78 Bytes

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

Probieren Sie es online!

3 Bytes Danke an Black Owl Kai .

Bei einer gegebenen Sammlung von Tupeln ist die Ausgabe eine Menge der Tupel mit der gewünschten maximalen Eigenschaft.

Chas Brown
quelle
78 Bytes
Black Owl Kai
@Black Owl Kai: Danke! Ich habe das verpasst ...
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();}

Probieren Sie es online!

Der größte Teil dieses Codes wird verwendet, um alle doppelten Werte zu entfernen, da der Standardvergleich für Listen die Werte in den Listen nicht vergleicht. Das bedeutet , dass ich nicht verwenden kann Distinct(), GroupBy()oder Containsdie Liste zu filtern.

Verkörperung der Ignoranz
quelle
0

K (ngn / k) , 17 Bytes

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

Probieren Sie es online!

{ } Funktion mit Argument x

=x group - Bilden Sie ein Wörterbuch, in dem die Schlüssel Zeilen und die Werte Listen ihrer Indizes in der Matrix sind

x@Indizieren Sie die ursprüngliche Matrix damit. Das Ergebnis ist wieder ein Wörterbuch mit den Zeilen als Schlüssel. Die Werte sind mehrere Kopien des entsprechenden Schlüssels

+//' Summe jeweils bis zur Konvergenz (wirkt sich nur auf die Werte aus; Schlüssel bleiben wie sie sind)

a: zuweisen a

|/ Maximum (der Werte)

a=|/a ein Row-to-Boolean-Wörterbuch, dessen Zeilen den größten Beitrag leisten

& "wo", dh welche Schlüssel entsprechen den Werten von 1

ngn
quelle
0

05AB1E , 10 9 Bytes

ês{γOOZQÏ

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

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

Gaia , 10 Bytes

ȯẋ_¦Σ¦:⌉=¦

Probieren Sie es online!

Da Gaia keine Listen durch Eingaben sehr einfach akzeptiert , ist dies eine Funktion , die eine Liste von oben nach oben auf dem Stapel akzeptiert und das Ergebnis oben belässt (als Masken in sortierter Reihenfolge).

ȯ           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
Geschäfts-Katze
quelle
0

J , 16 Bytes

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

Probieren Sie es online!

Ein monadisches Verb, das das boolesche Ergebnis in der Reihenfolge der Darstellung angibt.

Wie es funktioniert

[:(=>./)+/^: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
quelle