가장 기여하는 행


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를 제공합니다. 그러나 각각 한 번, 세 번 및 두 번 발생하므로 각각의 모든 발생이 총계에 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

하스켈, 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]]
Doorknob

1
이것은 사전 정의 된 변수에서 입력을받는 것처럼 보이지만, 허용되지 않습니다 . 제출은 기본적으로 전체 프로그램 또는 기능이어야합니다.
Dennis

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

유효하지 않습니다. 모든 행이 아닌 가장 큰 값을 가진 행 중 하나만 리턴합니다.
lirtosiast








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

K (ngn / k) , 17 바이트

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

온라인으로 사용해보십시오!

{ } 인수 기능 x

=x 그룹-키가 행이고 값이 행렬의 색인 목록 인 사전을 형성합니다.

x@그것으로 원래 행렬을 색인화하십시오. 결과는 다시 행을 키로 사용하는 사전입니다. 값은 해당 키의 여러 사본입니다.

+//' 수렴 할 때까지 합계 (값에만 적용, 키는 그대로 유지)

a: 할당하다 a

|/ 최대 값

a=|/a 행이 가장 많이 기여하는 행간 부울 사전

& "where", 즉 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/.~

온라인으로 사용해보십시오!

부울 결과를 모양 순서대로 제공하는 monadic 동사.

작동 원리

[:(=>./)+/^: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.