Більшість рядів


17

Давши не порожню матрицю невід’ємних цілих чисел, дайте відповідь, які унікальні рядки найбільше сприяють загальній сукупності елементів у матриці.

Відповідь за будь-якими розумними вказівками, наприклад, маскою унікального порядку появи рядків (або порядку сортування), або індексів (нульового або одного), або підматриці, що складається з рядків (у будь-якому порядку) або деяких вид побудови словника… - але поясніть це!

Приклади

[[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 кожного разу, коли вони виникають. Однак вони трапляються один раз, тричі та двічі відповідно, тому всі їхні відповідні внески вносять 6, 18 та 18 до загальної кількості (42), тому останні два ряди - ті, що найбільше сприяють. Отже, дійсні відповіді:

[false,true,true] маска за зовнішнім виглядом / порядком сортування чи
[1,2]/ [2,3] нулем / одноосновними показниками вищезазначених чи
[[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

Математика, 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
Девід Г. Лелека

Це не вірно; він повертає лише один із рядків із найбільшими значеннями, а не всі.
lirtosiast






1

Пітон 2 , 81 78 байт

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

Спробуйте в Інтернеті!

3 байти thx до чорної сови Кай .

Враховуючи колекцію кортежів, вихід - це набір тих кортежів, що мають бажане максимальне властивість.



@ Чорна сова Кай: 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

К (нг / к) , 17 байт

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

Спробуйте в Інтернеті!

{ } функція з аргументом x

=x група - сформуйте словник, у якому ключі є рядками, а значення - це списки їх індексів у матриці

x@індексуйте початкову матрицю з цим. результат - знову словник із рядками як клавішами. значення - це декілька копій відповідного ключа

+//' підсумовуйте до зближення кожного (діє лише на значення; ключі залишаються такими, якими вони є)

a: призначити a

|/ максимум (значення)

a=|/a рядок-булевий словник, рядки якого найбільше сприяють

& "де", тобто які клавіші відповідають значенням 1



0

05AB1E , 10 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?
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.