배열 데이터 그룹화


13

정수 행렬 a과 음이 아닌 정수가 주어지면 th 열의 고유 값을 th 열에 해당 값을 가진 행으로 i맵핑하는 맵핑 b을 출력하십시오 .iaai

i절반 개방 범위에 [0, num_cols(a))있거나 [1, num_cols(a)]1 기반 인덱스를 사용하도록 선택한 경우 모든 정수가 사용자 언어의 표현 가능한 범위 내에 있다고 가정 할 수 있습니다. 입력 및 출력은 챌린지의 기본 요구 사항 (2 차원 배열-> 정수에서 2 차원 정수로의 매핑)을 충족하는 한 합리적인 방법으로 수행 할 수 있습니다. 매핑이 명확하고 일관된 한 출력에 키를 포함시킬 필요는 없습니다.

[[1]], 0 -> {1: [[1]]}
[[3, 4, 5], [1, 4, 2], [5, 5, 5], [7, 7, 7], [1, 5, 9]], 1 -> {4: [[3, 4, 5], [1, 4, 2]], 5: [[5, 5, 5], [1, 5, 9]], 7: [[7, 7, 7]]}
[[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [2, 3, 4, 5, 6], [8, 9, 100, 0, 2]], 4 -> {5: [[1, 2, 3, 4, 5]], 1: [[5, 4, 3, 2, 1]], 6: [[2, 3, 4, 5, 6]], 2: [[8, 9, 100, 0, 2]]}

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.



확인하기 위해 매핑이 함수가 될 수 있습니까? 이것이 기본값인지는 모르겠지만 허용하려는 것 같습니다.
FryAmTheEggman

@FryAmTheEggman 예, 일반적인 요구 사항을 충족하는 기능이 허용됩니다. I / O는 매우 유연합니다.
Mego

3
출력이 실제로 입력 자체를 포함 할 필요가 없기 때문에이 I / O 형식이 매우 좋습니다. 함수가 매핑 인 한 참조로 입력에 액세스하는 함수를 반환하는 것이 좋습니다.
JungHwan Min

@JungHwanMin 나는 기쁘다. 나는 아주 느슨한 I / O 형식을 실험하고 싶어하고, 지금까지 잘거야
Mego

답변:


4

옥타브 , 24 바이트

@(a,i)@(n)a(a(:,i)==n,:)

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

행이 기준과 일치하는 행렬을 반환하는 익명 함수를 만듭니다. 옥타브는 0이 아닌 1에서 배열을 인덱스하고 행렬의 행은로 구분됩니다 ;.

행렬은 Octave가 가장 잘 수행하는 기능이므로 실제로는 이러한 기능을 내장 함수없이 순수한 구문을 사용하여 해결할 수 있습니다.

설명

@(a,i)                   % creates an anonymous function that...
      @(n)               % returns another function that takes input n and
                         % maps it to the rows of a.
          a(         ,:) % Return all the columns of a, with the rows filtered by...
            a(:,i)       % whether the ith column of each row of a...
                  ==n    % equals n


3

Wolfram Language (Mathematica) , 21 바이트

#~GroupBy~Extract@#2&

1- 색인. Association매핑을 반환합니다 .

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

이것은 더 긴 함수 ( Extract) 가 카레 할 수 있기 때문에 바이트 수 (짧은 것 Part또는 [[ ... ]])를 줄이는 드문 경우입니다 Extract. 결과적으로 이것은 매우 간결한 2 기능 솔루션입니다.

설명

Extract@#2

<second input>th 요소 를 추출하는 함수입니다 .

#~GroupBy~ ...

<first input>고유 키와 관련된 목록으로 그룹화하십시오 <above function>[element].




2

J , 16 바이트

FrownyFrog 덕분에 -3 바이트!

{"1(~.@[;"0</.)]

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

설명:

i왼쪽 인수 a로, 오른쪽 동사로 사용하는 2 차원 동사 .

] 올바른 주장입니다 a

{"1i각 행의 열에서 숫자를 찾습니다.

</. 키로 선택한 오른쪽 인수에서 왼쪽으로 제공되는 상자 그룹

~.@[ 고유 키를 찾습니다

;"0 선택된 그룹에 키를 연결


;"0대신은 ,:3 저장
FrownyFrog

@FrownyFrog 물론입니다! 나는 그것을 시도했다고 생각하지만 분명히 올바른 방법은 아닙니다.
Galen Ivanov

2

jq, 100 바이트

출력을 위해 객체를 사용하고, $f표준 입력에 명령 행 인수 와 배열을 갖습니다.

([.[]|.[$f]]|unique) as $c|[$c[] as $d|{($d|tostring):([.[]|[select(.[$f]==$d)]]|add)}]|add

난독 화 :

.fieldnum as $field |
.input as $input |
([$input[] | .[$field]] | unique) as $categories |
[
    $categories[] as $category |
    {
        ($category | tostring) :
            ([$input[] | [select(.[$field]==$category)]] | add)
    }
] | add

사용하고있는 언어?
OUurous





0

젤리 , 5 바이트

ịⱮ⁹¹ƙ

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

키를 생략하지만 명확해야합니다.

인수 1 : i + 1
인수 2 : a


이것이 키가없는 매핑으로 자격이 있다고 생각하지 않습니다.
Dennis

@Dennis Hm, 나는 그것에 대해 의견을 물었고 OP는 우리가 키를 생략 할 수 있다고 말했고 (정확하게 질문으로 편집 한 것)이 솔루션을 연결했습니다 (아마도 플래그가 너무 일찍 표시되어서는 안됩니다 ... ). 이 답변의 이전 개정판에 키를 포함 시켰기 때문에 (응답을 기다리는 중) 다른 의견을 게시하고 OP의 말을 보도록하겠습니다.
Outgolfer Erik

0

자바 10, 135 64 바이트

m->i->n->new java.util.Stack(){{for(var a:m)if(a[i]==n)add(a);}}

' Function<Integer, List<int[]>>integer-input n'을 받아들이고 ,이 i값은 주어진 값과 동일한 배열 목록 (행렬)을 반환합니다 n.

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

설명:

m->i->               // Method with int-matrix and int parameters and Function return-type
  n->                //  Return a Function with integer as parameter
    new java.util.Stack(){{
                     //  and List of integer-arrays as return-type
      for(var a:m)   //   Loop over the arrays of the input-matrix
        if(a[i]==n)  //    If the `i`'the value of the current array equals `n`:
          add(a);}}  //     Add it to the return-List
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.