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


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

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

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

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



@ Черная Сова Кай: спасибо! Я пропустил это ...
Час Браун


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?
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.