Наиболее способствующие строки

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

Pyth , 9 байт

-1 спасибо FryAmTheEggman!

{s.MssZ.g

Попробуйте онлайн!

Мистер Xcoder
источник
1
Финал kне нужен. Также .M*sZ/QZ{кажется, что решение такой же длины тогда.
FryAmTheEggman
1
@FryAmTheEggman О боже, как я забыл об автозаполнении? Большое спасибо!
г-н Xcoder
4

R , 64 байта

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

Попробуйте онлайн!

Возвращает логический вектор с TRUE / FALSE в порядке сортировки (лексикографический).
Уникальные строки отображаются в виде имен векторов, поэтому легко определить наиболее способствующие.

digEmAll
источник
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
Дэвид Дж. Аист
Это недействительно; он возвращает только одну из строк с наибольшими значениями, а не все из них.
lirtosiast
1

JavaScript (ES6), 88 байт

Выводит массив логических значений в порядке появления.

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)

Попробуйте онлайн!

Arnauld
источник
1

Groovy , 76 байт

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

Попробуйте онлайн!

Возвращается как логическое значение в порядке сортировки

ASCII-только
источник
1

Python 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 байта спасибо Черной Сове Кай .

Для данной коллекции кортежей выводом является набор тех кортежей, которые имеют желаемое максимальное свойство.

Час Браун
источник
78 байт
Black Owl Kai
@ Черная Сова Кай: спасибо! Я пропустил это ...
Час Браун
0

C # (интерактивный компилятор Visual C #) , 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 group - формирует словарь, в котором ключи - это строки, а значения - списки их индексов в матрице.

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

Gaia , 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?
фонтанчик для питья
источник