最も貢献している行


17

負でない整数の空でない行列が与えられた場合、どの一意の行が行列の要素の合計に最も寄与するかを答えてください。

たとえば、一意の行の出現順序(または並べ替え順序)のマスク、それらのインデックス(0または1ベース)、行(任意の順序)または一部のサブマトリックス一種の辞書構成体…—しかし、説明してください!

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

一意の行があり[1,2,3][2,0,4]及び[6,3,0]それぞれは、それぞれ6,6、および9それらが発生するたびに寄与する。ただし、それらはそれぞれ1回、3回、2回発生するため、それぞれの発生はすべて合計で6、18、および18になり(42)、後者の2行が最も寄与します。したがって、有効な答えは次のとおりです。

[false,true,true] 上記または 実際の行の 外観/ソート順または
[1,2]/ [2,3]ゼロ/ 1ベースのインデックスの マスク⋮
[[2,0,4],[6,3,0]]


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

[false,false,true](表示順)/ [false,true,false](ソート順)
[2]/ [3](表示順)/ [1]/ [2](ソート順)
[[2,3]]

回答:




4

R、64バイト

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

オンラインでお試しください!

ソート順(辞書式)でTRUE / FALSEのブールベクトルを返します。
一意の行はベクトル名として表示されるため、最も寄与している行を簡単に識別できます。



2

Haskell、60バイト

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

行のリストを返します。


2

、25バイト

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

オンラインでお試しください!リンクは、コードの詳細バージョンです。デフォルトの出力形式は、独自の行の各行要素であり、行はダブルスペースです。説明:

  θ                         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バイト

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

または

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

どこ(たとえば)

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
あなたは速記を使用してバイトを保存するために空白削除することができますSortBy[Gather@m,Total@*Flatten][[-1,1]]
ドアノブ

1
これは、許可されていない事前定義変数から入力を受け取るように見えます。提出物は、デフォルトで完全なプログラムまたは機能である必要があります。
デニス

TakeLargestBy[Gather[m], Total[#, 2] &, 1][[1, 1]] /@ m
デビッドG.ストーク

これは無効です。すべての行ではなく最大値を持つ行の1つのみを返します。
リルトシアスト






1

パイソン281の 78バイト

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

オンラインでお試しください!

Black Owl Kaiへの3バイトの送信。

タプルのコレクションを指定すると、出力は、目的の最大プロパティを持つタプルのセットになります。



@Black Owl Kai:thx!私はそれを見逃した...
チャスブラウン


0

C#(Visual C#Interactive Compiler)、126バイト

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

オンラインでお試しください!

リストのデフォルトの比較器はリスト内の値を比較しないため、このコードのほとんどは、重複する値をすべて取り出すために費やされます。私が使用できないことを意味しDistinct()GroupBy()またはContainsリストをフィルタリングします。


0

K(ngn / k)、17バイト

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

オンラインでお試しください!

{ } 引数付きの関数 x

=x group-キーが行で、値がマトリックス内のインデックスのリストである辞書を形成します

x@それで元の行列にインデックスを付けます。結果は、再びキーを行とする辞書です。値は対応するキーの複数のコピーです

+//' それぞれが収束するまで合計します(値にのみ作用します;キーはそのままです)

a: に割り当てます a

|/ 最大(値の)

a=|/a 行が最も寄与する行対ブール辞書

& 「where」、つまりどのキーが1の値に対応するか



0

05AB1E10 9 バイト

ês{γOOZQÏ

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

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

ガイア、10バイト

ȯẋ_¦Σ¦:⌉=¦

オンラインでお試しください!

Gaiaは入力を介してリストを簡単に受け入れないため、これはスタックの最上部から上からリストを受け入れ、結果を(ソートされた順序のマスクとして)最上部に残す関数です。

ȯ           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バイト

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

オンラインでお試しください!

ブール値の結果を出現順に与える単項動詞。

使い方

[:(=>./)+/^: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?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.