Twoim wyzwaniem jest dziś napisanie programu lub funkcji, która pobiera listę l
i podaje pozycje, w l
których l
pojawia się każdy kolejny posortowany element .
Innymi słowy, wypisz indeks najmniejszej wartości, a następnie indeks drugiej najmniejszej wartości itp.
Możesz założyć, że tablica wejściowa będzie zawierać tylko dodatnie liczby całkowite i będzie zawierać co najmniej jeden element.
Przypadki testowe:
Input | Output (1-indexed)
[7, 4, 5] | [2, 3, 1]
[1, 2, 3] | [1, 2, 3]
[2, 6, 1, 9, 1, 2, 3] | [3, 5, 1, 6, 7, 2, 4]
[4] | [1]
Kiedy pojawią się dwa lub więcej elementów o tej samej wartości, ich wskaźniki powinny pojawić się obok siebie od najmniejszej do największej.
To jest golf golfowy , wygrywa najmniej bajtów!
Odpowiedzi:
Galaretka , 1 bajt
Wypróbuj online!
źródło
Dyalog APL, 1 bajt
Dyalog APL ma wbudowaną funkcję
operatora(dziękuję Zacharý za wyjaśnienie tego), aby to zrobić.Przykład
Tutaj indeksuję listę według posortowanych indeksów, aby zwrócić listę w porządku rosnącym.
źródło
⍋
są uważane za funkcje, podczas gdy podobne¨⍨⍣.∘/\⌿⍀⌸⍤
są operatorami.Haskell ,
4342 bajty1
-indexed:Wypróbuj online!
-1
bajt dzięki @ ØrjanJohansen!źródło
map snd.sort.(`zip`[1..])
.Python 2 , 56 bajtów
To rozwiązanie ma indeks 0. To narusza fakt, że
sorted()
tworzy kopię oryginalnej listy.Wypróbuj online!
źródło
JavaScript (ES6), 39 bajtów
-2 bajty dzięki @powelles
Działa to tylko w przeglądarkach, w których
Array.prototype.sort
jest stabilny.Wersja 1-indeksowana (47 bajtów):
Przykładowy fragment kodu:
źródło
[...a.keys()]
zamiasta.map((_,i)=>i)
zaoszczędzi ci kilka bajtów.Python 2 , 48 bajtów
Wypróbuj online!
źródło
__<blahblah>__
składni). Zrobię trochę galaretki, nie chcę stracić szkolenia :)Perl 6 ,
2721 bajtówSprawdź to
Sprawdź to
Zainspirowany odpowiedzią w języku Python
Rozszerzony:
źródło
Bash + coreutils, 20
Wypróbuj online .
źródło
Swift 4 , 82 bajtów
Pakiet testowy.
Wyjaśnienie
W Swift
l.sorted()
tworzy posortowaną kopię oryginalnej tablicy. Przechodzimy przez posortowane elementy na liście i po wydrukowaniu indeksu każdego elementu w oryginalnej tablicy za pomocąlet a=l.index(of:k)!;print(a)
, a następnie, aby zachować prawidłowe indeksy w tablicy, przypisujemyl[a]
do0
, ponieważ nie wpływa to na nasze normalne wyniki.Take note that this is 0-indexed, since it is a port of my Python solution. If you want it to be 1-indexed, replace
print(a)
withprint(a+1)
or Try it online!.źródło
R, 5 bytes
There is a builtin function for this.
źródło
order
is already a function, so you don't have to handle input usingscan()
. This would be 5 bytes.rank()
would save a byterank
answer by @JarkoDubbeldam, but I do not see it anymore.Ruby, 40 bytes
Try it online!
źródło
MATL, 2 bytes
Try it online!
Input and output are implicit.
źródło
J, 2 bytes
Try it online!
Zero-based indexing.
źródło
Octave, 17 bytes
Try it online!
Octave is like MATLAB but with inline assignment, making things possible that gives the folks at Mathworks HQ headaches. It doesn't matter what you call
y
, but you can't do without that dummy variable, as far as I know.źródło
MY, 3 bytes
MY also has a builtin for this!
Try it online!
How?
Evaluated input, grade up, then output with a newline.
Indexed however you set the index, with
⌶
/0x48
. (Can even be some weird integer like-1
or2
, the default is1
).źródło
Java 8, 128 + 19 = 147 bytes
Based on Mr. Xcoder's solution. 0-based. Lambda takes input as an
Integer[]
and returnsInteger[]
. Byte count includes lambda expression and required import.Try It Online
Ungolfed lambda
Notes
I use
Integer[]
instead ofint[]
to allow use ofArrays.asList
, which has no primitive versions.Integer
is preferred toLong
because values are used as array indices and would require casting.This ended up being shorter than my best procedural-style
List
solution because of the cost of class and method names.This also beat a solution I tried that streamed the inputs, mapped to (value, index) pairs, sorted on values, and mapped to indices, mostly because of the baggage needed to collect the stream.
Acknowledgments
źródło
j
:l->{Integer o[]=l.clone(),s[]=l.clone(),i=0;for(Arrays.sort(s);i<l.length;l[o[i]=Arrays.asList(l).indexOf(s[i++])]=0);return o;}
(19+128 bytes).Common Lisp, 82 bytes
Try it online!
źródło
Clojure, 39 bytes
źródło
{map *.key,(sort *.value,(0..* Z=> @_))}
CJam, 12 bytes
Try it online!
źródło
MATLAB / Octave, 29 bytes
Try it online!
źródło
@(X)([~,y]=sort(X))
, and while I was looking of a way to gety
from this, I realizedy
was actually the return value from the assignment, and closer inspection revealed that brackets weren't even needed. MATLAB likes everything explicit; Octave is happy when it's unambiguous.JavaScript (ES6), 69 bytes
0-indexed. Works for lists containing up to 65,536 elements.
Test cases
Show code snippet
źródło
n=>a.indexOf(n)
to justa.indexOf
?Array#map
passes 3 arguments to the callback function, andArray#indexOf
expects 2, so it will give undesirable results.Python 3, 52 bytes
0-indexed. Based on Bruce Forte's Haskell answer here and G B's Ruby answer here.
Try it online!
źródło
Husk,
107 bytesThis is a direct port of my Haskell answer, also
1
-indexed:Try it online!
Ungolfed/Explained
źródło
Java (OpenJDK 8), 72 bytes
Try it online!
Takes a
List<Integer>
, returns aStream<Integer>
containing the results.We get a Stream based off the initial list, sort it, then map each number to it's index in the list. In order to accommodate duplicate elements, we set the original element in the list to
0
.źródło
SmileBASIC, 67 bytes
Very simple, all it does is generate a list of numbers from 1 to (length of array) and sort this by the same order as the input.
źródło
Python 3 with Numpy,
3826 bytes12 bytes saved thanks to Jo King (no need to give the function a name)
Output is 0-based.
Try it online!
źródło
numpy.argsort
without the lambda partnumpy.argsort;import numpy
I get an error (numpy
has not been imported yet), and withimport numpy;numpy.argsort
I need to movef=
to the code part. Do you know that the standard procedure is in these cases? Move thef=
and not count it?f=numpy.argsort
in the footer05AB1E, 4 bytes
Try it online!
źródło
Pari/GP, 16 bytes
Try it online!
źródło
PHP, 54 bytes
Try it online!
This is zero-indexed. Simply sorts the array and returns the keys.
źródło
<?php
tag is unnecessary for a function. 48 bytes.Tcl, 21 bytes
(0-indexed)
Try it online!
źródło