개요
정수 목록이 주어지면 각 정수가 정렬 될 때 끝나는 색인을 반환하십시오.
예를 들어 목록이 [0,8,-1,5,8]
이면을 반환해야합니다 [1,3,0,2,4]
. 두 8
s가 서로에 대해 순서를 유지 한다는 점에 유의하십시오 (정렬).
다른 방법으로 넣으십시오. 목록의 각 요소에 대해 다음과 같은 목록의 요소 수를 리턴하십시오. 선택한 요소보다 작음 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
⍋x
1
⍋x
그러나 우리 ⍋x
는 숫자 [0, 1… n-1]을 정확히 포함하고 있다는 것을 알고 있습니다 . 우리는 등급을하면 다시 , 우리는 단지의 인덱스거야 0
에서 ⍋x
의 다음 인덱스 1
에 ⍋x
우리가 관심을하는지 정확하게, 등.
대답은 ⍋⍋x
입니다.
답변
답변
자바 스크립트 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
)
답변
답변
하스켈, 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