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

Antworten:




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.


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!


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.


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

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

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!








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.


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



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

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

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?
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.