목록 주문 요소에 대해 다음과 같은

개요

정수 목록이 주어지면 각 정수가 정렬 될 때 끝나는 색인을 반환하십시오.

예를 들어 목록이 [0,8,-1,5,8]이면을 반환해야합니다 [1,3,0,2,4]. 두 8s가 서로에 대해 순서를 유지 한다는 점에 유의하십시오 (정렬).

다른 방법으로 넣으십시오. 목록의 각 요소에 대해 다음과 같은 목록의 요소 수를 리턴하십시오. 선택한 요소보다 작음 OR (요소와 같고 선택한 요소 앞에 나타남)

인덱스는 0 (1 아님)으로 시작해야합니다. 편집 : 큰 푸시 백이 주어지면 1 기반 인덱스를 허용합니다.

테스트 사례 :

0                -> 0
23               -> 0
2,3              -> 0,1
3,2              -> 1,0
2,2              -> 0,1
8,10,4,-1,-1,8   -> 3,5,2,0,1,4
0,1,2,3,4,5,6,7  -> 0,1,2,3,4,5,6,7
7,6,5,4,3,2,1,0  -> 7,6,5,4,3,2,1,0
4,4,0,1,1,2,0,1  -> 6,7,0,2,3,5,1,4
1,1,1,1,1,1,1,1  -> 0,1,2,3,4,5,6,7
1,1,1,1,1,1,1,0  -> 1,2,3,4,5,6,7,0



답변

APL, 2 바이트

⍋⍋

“그레이드 업”내장, 두 번 적용. 인덱싱이 0에서 시작하는 경우 작동합니다. APL의 모든 특징에 대한 기본값은 아닙니다. 여기 사용해보십시오!

왜 이것이 작동합니까?

⍋x안정적으로 정렬되는 인덱스 목록을x 반환합니다 . 예를 들면 다음과 같습니다.

    x ← 4 4 0 1 1 2 0 1
    ⍋x
2 6 3 4 7 5 0 1

당신이 요소를 가지고가는 경우에 있기 때문에 2, 다음 6, 다음 3… 당신은 안정적으로 정렬 된 목록을 얻을 :

    x[⍋x]
0 0 1 1 1 2 4 4

그러나이 질문에 답하는 색인 ​​목록은 미묘하게 다릅니다. 먼저 가장 작은 요소의 색인을 원하고 그 다음으로 작은 항목을 원합니다. 다시 원래 순서대로 유지하십시오.

그러나을 살펴보면 ⍋x이 목록을 쉽게 얻을 수 있다는 것을 알 수 있습니다. in 의 위치 는 정렬 후 가장 작은 요소가 끝나는 위치 를 알려주고 in 의 위치 는 두 번째로 작은 요소가 끝나는 위치 를 알려줍니다 등0⍋x1⍋x

그러나 우리 ⍋x는 숫자 [0, 1… n-1]을 정확히 포함하고 있다는 것을 알고 있습니다 . 우리는 등급을하면 다시 , 우리는 단지의 인덱스거야 0에서 ⍋x의 다음 인덱스 1⍋x우리가 관심을하는지 정확하게, 등.

대답은 ⍋⍋x입니다.


답변

젤리, 2 바이트

ỤỤ

두 번 등급을 매기십시오. 1- 색인. 온라인으로 사용해보십시오!


답변

자바 스크립트 ES6, 87 82 79 74 70 바이트

(a,b={})=>a.map(l=>[...a].sort((a,b)=>a-b).indexOf(l)+(b[l]=b[l]+1|0))

물건을 사용하는 것을 좋아하지 않지만 속력을 추적하는 가장 짧은 방법 인 것 같습니다.

설명

(a,b={})=>          `a` is input
                    `b` stores the occurrences of each number
  a.map(l =>        Loop over the array, `l` is item
  [...a]            Copy `a`
    .sort(...)       Sort in ascending numerical order
    .indexOf(l)      Index of input in that array
  +                 Add the following to account for dupes
   (b[l]=            set and return the item `l` in hashmap `b` to...
     b[l]+1           Increase the counter by one if it exists yet
     |0               default is zero
   )


답변

K , 5 2 바이트

<<

<두 번 등급을 매 깁니다 ( ). JohnE는 K에 존재하는 암묵적인 표현을 지적함으로써 3 바이트를 절약했습니다! 슈퍼 쿨. 사용해보십시오.


답변

하스켈, 50 48 바이트

import Data.List
m x=map snd$sort$zip x[0..]
m.m

사용 예 : m.m $ [4,4,0,1,1,2,0,1]-> [6,7,0,2,3,5,1,4].

이것은있어 map snd.sort.zip x [0..]입력에 두번 도포 즉 그것의 인덱스 I (각 요소, 즉 짝 (e,i)정렬이 첫번째 요소를 제거). 한 번 반복하십시오.

@Lynn은 m=map snd.sort.(`zip`[0..])동일한 바이트 수를 가진 것으로 나타났습니다 .


답변

파이썬 2, 67 60 바이트

def f(x):x=zip(x,range(len(x)));print map(sorted(x).index,x)

7 바이트를 골라 낸 @xnor에게 감사드립니다!

Ideone에서 테스트하십시오 .


답변

PowerShell v2 +, 63 바이트

param($n)$n|%{($n|sort).IndexOf($_)+($n[0..$i++]-eq$_).count-1}

입력을 $n받아 모든 요소에 루프를 통해 파이프를 전달합니다 |%{...}. 반복 할 때마다 현재 요소를 sort $n얻습니다 . 현재 요소보다 작은 항목 수를 계산합니다. 여기에 현재 요소 와 동일한 요소의 모든 루프 반복을 확장 하는 슬라이스를 추가하고 그 요소 를 가져옵니다 . 그런 다음 현재 요소를 계산하지 않도록 빼고 그 수는 파이프 라인에 남습니다. 마지막 출력은 암시 적입니다.IndexOf$_$n$_.Count-1

PS C:\Tools\Scripts\golfing> .\ordering-a-list.ps1 @(4,4,0,1,1,2,0,1)
6
7
0
2
3
5
1
4

PS C:\Tools\Scripts\golfing> .\ordering-a-list.ps1 @(8,10,4,-1,-1)
3
4
2
0
1