이 과제의 목표는 양의 정수 배열을 가져 와서 요소처럼 그룹화하여 해당 인덱스를 열거하는 것입니다.
중복되지 않은 열거는 쌍 배열을 출력하여 수행됩니다 ( (value, index)
예 : [3, 4, 13, 9, 2]
=>) [[3,1],[4,2],[13,3],[9,4],[2,5]]
.
그러나 주어진 요소가 두 번째로 나타나면 자체 쌍이 제공되지 않고 대신 첫 번째 그룹에 추가됩니다. 우리가 3 9를 대체 우리 위의 예 경우, 출력에 우리는 제거 할 [9,4]
및 교체 [3,1]
와 함께 [3,1,4]
.
출력에서 그룹은 첫 번째 발생 순서로 정렬되어야하며 인덱스는 오름차순이어야합니다. 요소는 색인보다 먼저 그룹에서 첫 번째 여야합니다. 출력은 0 또는 1 인덱싱 될 수 있습니다. 배열에 하나 이상의 요소가 있다고 가정 할 수 있습니다.
테스트 사례 :
Input | Output (One-indexed)
[3, 2, 2, 3] | [[3, 1, 4], [2, 2, 3]]
[17] | [[17, 1]]
[1, 1] | [[1, 1, 2]]
[1, 1, 2] | [[1, 1, 2], [2, 3]]
[1, 2, 3, 4] | [[1, 1], [2, 2], [3, 3], [4, 4]]
[1, 1, 1, 1] | [[1, 1, 2, 3, 4]]
이것은 code-golf 이며 가장 적은 바이트 수입니다!
답변
답변
J , 12 바이트
~.,&.><@I.@=
인덱스가 0입니다.
상자로하고있는 모든 작업을 제거 할 수 있다면 바이트 수를 상당히 줄일 수 있습니다. 나는 그것을 알아낼 수 있는지 볼 것입니다.
설명
이것은 설명하기에는 너무 이르다 (더 많은 골프가 있어야한다).
~. ,&.> <@I.@=
= Self-classify (comparison of each unique element to array)
@ Composed with
I. Indices of ones (where it's equal)
@ Composed with
< Boxed (how we deal with arrays of unequal length)
,&.> Joined with
> Unbox each
, Concatenate
&. Box again
~. Unique elements
답변
05AB1E , 10 바이트
ÙεDIQƶ0K)˜
설명
Ù # remove duplicates
ε # apply to each element
D # duplicate
IQ # compare for equality with input
ƶ # multiply each element by its index (1-based)
0K # remove zeroes
)˜ # wrap in a flattened list
답변
파이썬 3 , 83 82 바이트
Mego 덕분에 -1 바이트
lambda x:[[n]+[j for j,m in enumerate(x)if m==n]for n in sorted({*x},key=x.index)]
답변
답변
첨부 , 15 바이트
Flat=>Positions
이것은 =>
연산자 형식의 흥미로운 사례 입니다 Map
. 이 기능 인자가있을 때 f
와 g
, Map
함수 반환 f => g[x]
이상을 x
. 즉, RHS가 입력에 적용된 다음 LHS가 매핑됩니다.
내장 Positions
은 인덱스로 항목 그룹을 나타내는 배열을 생성합니다. 기본적으로 두 번째 인수가 제공되지 않으면 Positions
첫 번째 인수가 사용됩니다. Flat
그런 다음 질문에 필요한대로 각 항목에 매핑됩니다.
대체 솔루션
31 바이트
MapArgs[Concat#~Indices,Unique]
아주 짧고 내장 된 대안입니다. 추가 인수를 제공 할 수 있다는 점을 제외하고 MapArgs
와 같은 함수 Map
입니다. 예를 들어 MapArgs[{_1 + _2}, 1..3, 3]
입니다 [4, 5, 6]
. 마찬가지로 Map
두 개의 기능 인수가 제공되면 커리됩니다. 매핑되는 함수 Concat#~Indices
는 포크입니다. 이 포크는 Unique
입력 항목과 입력 자체에 적용됩니다. 이것은 Concat[_, Indices[_2, _]]
( Indices
스왑 인수를 통해 ~
)로 변환되며 , 이는 매핑되는 요소 ( _
)를 _
입력 배열에서 해당 요소의 인덱스 _2
와 짝을 이룹니다 ( MapArgs
)
43 바이트
{Flat=>Zip[Unique[_],Indices[_,Unique[_]]]}
이것은 실제로 솔루션 # 1과 # 2의 더 장황한 (그러나 더 읽기 쉬운) 조합입니다.
답변
젤리 , 6 바이트
Q;"ĠṢ$
설명:
Q;"ĠṢ$
Q Keep the first occurrence of each element
$ Last two links as a monad
Ġ Group indices of equal elements, then sort the resulting list of groups by the element they point to
Ṣ Sort; used to re-order the list of groups based on first occurrence instead
" Vectorize link between two arguments (the first occurrences and the group list)
; Concatenate