En çok katkıda bulunan satırlar


17

Negatif olmayan tam sayıların boş olmayan bir matrisi göz önüne alındığında, hangi benzersiz satırların matristeki toplam öğelerin toplamına en çok katkıda bulunduğunu yanıtlayın.

Herhangi bir makul endikasyonla, örneğin, benzersiz satırların görünüm sırasına (veya sıralama düzenine) veya bunların indekslerine (sıfır veya bir tabanlı) veya satırlardan (herhangi bir sırada) oluşan bir alt matris veya bazılarından bir tür sözlük yapısı… - ama açıklayın!

Örnekler

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

Benzersiz satırlar vardır [1,2,3], [2,0,4]ve [6,3,0]her sırasıyla 6, 6, ve 9 her gerçekleştiğinde katkı. Bununla birlikte, sırasıyla bir kez, üç kez ve iki kez ortaya çıkarlar, bu nedenle ilgili tüm oluşumları toplamda 6, 18 ve 18'e katkıda bulunur (42), bu nedenle son iki sıra en çok katkıda bulunanlardır. Bu nedenle geçerli cevaplar:

[false,true,true] yukarı veya  gerçek satırların  görünüm / sıralama düzeninde
[1,2]/ / [2,3]sıfır / tek tabanlı indekslerde maske ⋮
[[2,0,4],[6,3,0]]


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

[false,false,true](görünüm sırası) / [false,true,false](sıralama düzeni)
[2]/ [3](görünüm sırası) / [1]/ [2](sıralama düzeni)
[[2,3]]

Yanıtlar:




4

R , 64 bayt

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

Çevrimiçi deneyin!

Sıralama düzeninde TRUE / FALSE olan bir boole vektörü döndürür (sözlükbilimsel).
Benzersiz satırlar vektör adları olarak gösterilir, bu nedenle en çok katkıda bulunanları tanımlamak kolaydır.


3

Python 3 , 153 145 129 bayt

@Mr sayesinde -8 bayt. 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]]

Çevrimiçi deneyin!


2

Haskell, 60 bayt

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

Satırların bir listesini döndürür.


2

Kömür , 25 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Varsayılan çıktı biçimi, kendi satırındaki her satır öğesidir ve çift aralıklı satırlardır. Açıklama:

  θ                         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 bayt

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

veya

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

nerede (örneğin)

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
Sen bayt kaydetmek için steno kullanabilir ve boşluk kaldırabilirsiniz:SortBy[Gather@m,Total@*Flatten][[-1,1]]
Kapı Tokmağı

1
Bu, izin verilmeyen önceden tanımlanmış bir değişkenten girdi alıyor gibi görünüyor . Başvurular varsayılan olarak tam program veya işlev olmalıdır.
Dennis

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

Bu geçerli değil; yalnızca hepsinden ziyade en büyük değerlere sahip satırlardan birini döndürür.
lirtosiast

1

JavaScript (ES6), 88 bayt

Görünüm sırasıyla Boolean değerleri dizisi çıktılar.

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)

Çevrimiçi deneyin!








0

C # (Visual C # Etkileşimli Derleyici) , 126 bayt

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

Çevrimiçi deneyin!

Listelerin varsayılan karşılaştırıcısı listelerdeki değerleri karşılaştırmadığından, bu kodun çoğu tüm yinelenen değerleri alarak harcanır. Bunun anlamı kullandığım olamayacağını Distinct(), GroupBy()ya Containslisteye filtre etmek.


0

K (ngn / k) , 17 bayt

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

Çevrimiçi deneyin!

{ } argüman ile işlev x

=x grup - anahtarların satır olduğu ve değerlerin matristeki dizinlerinin listesi olduğu bir sözlük oluşturun

x@bununla orijinal matrisi indeksleyin. sonuç yine satırları anahtar olarak içeren bir sözlüktür. değerler, ilgili anahtarın birden çok kopyasıdır

+//' her biri yakınsamaya kadar toplam (yalnızca değerlere göre hareket eder; anahtarlar oldukları gibi kalır)

a: atamak a

|/ maksimum (değerlerden)

a=|/a satırların en çok katkıda bulunduğu bir satırdan boole sözlüğüne

& "nerede", yani hangi anahtarlar 1 değerlerine karşılık gelir



0

05AB1E , 10 9 bayt

ês{γOOZQÏ

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

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

ȯẋ_¦Σ¦:⌉=¦

Çevrimiçi deneyin!

Gaia listeleri girişler aracılığıyla çok kolay kabul etmediği için, bu, yığının üstünden üstten bir listeyi kabul eden ve sonucu üstte bırakan bir işlevdir (sıralı düzen maskeleri olarak).

ȯ           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 bayt

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

Çevrimiçi deneyin!

Boole sonucunu görünüm sırasıyla veren monadik bir fiil.

Nasıl çalışır

[:(=>./)+/^: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?
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.