Ihre heutige Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die eine Liste erstellt l
und die Positionen angibt, l
an denen jedes aufeinanderfolgende Element von l
sortiert erscheint.
Mit anderen Worten, geben Sie den Index des kleinsten Werts gefolgt vom Index des zweitkleinsten Werts usw. aus.
Sie können davon ausgehen, dass das Eingabearray nur positive Ganzzahlen und mindestens ein Element enthält.
Testfälle:
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]
Wenn zwei oder mehr Elemente mit demselben Wert angezeigt werden, sollten ihre Indizes vom kleinsten zum größten nebeneinander angezeigt werden.
Das ist Code-Golf , die wenigsten Bytes gewinnen!
Antworten:
Gelee , 1 Byte
Probieren Sie es online!
quelle
Dyalog APL, 1 Byte
Dyalog APL hat eine eingebaute
Operatorfunktion(danke Zacharý für die Aufklärung), um dies zu tun.Beispiel
Hier indiziere ich die Liste anhand der sortierten Indizes, um die Liste in aufsteigender Reihenfolge zurückzugeben.
quelle
⍋
Funktionen als Funktionen betrachtet, während¨⍨⍣.∘/\⌿⍀⌸⍤
Operatoren als solche gelten.Haskell ,
4342 Bytes1
-indexiert:Probieren Sie es online!
-1
byte danke an @ ØrjanJohansen!quelle
map snd.sort.(`zip`[1..])
.Python 2 , 56 Bytes
Diese Lösung ist 0-indiziert. Dies missbraucht die Tatsache, dass
sorted()
eine Kopie der ursprünglichen Liste erstellt wird.Probieren Sie es online!
quelle
Javascript (ES6), 39 Byte
-2 Bytes dank @powelles
Dies funktioniert nur in Browsern, in denen
Array.prototype.sort
es stabil ist.1-indizierte Version (47 Bytes):
Beispielcode-Snippet:
quelle
[...a.keys()]
Statta.map((_,i)=>i)
sparen Sie ein paar Bytes.Python 2 , 48 Bytes
Probieren Sie es online!
quelle
__<blahblah>__
Syntax). Ich werde einPerl 6 ,
2721 BytesProbier es aus
Probier es aus
Inspiriert von einer Python-Antwort
Erweitert:
quelle
Bash + Coreutils, 20
Probieren Sie es online aus .
quelle
Schnelle 4 , 82 Bytes
Test Suite.
Erläuterung
Erstellt in Swift
l.sorted()
eine sortierte Kopie des ursprünglichen Arrays. Wir durchlaufen die sortierten Elemente in der Liste und drucken den Index jedes Elements im ursprünglichen Array mit.let a=l.index(of:k)!;print(a)
Um die korrekten Indizes im Array beizubehalten, weisen wir siel[a]
zu0
, da dies unsere normale Ausgabe nicht beeinträchtigt.Beachten Sie, dass dies 0-indiziert ist, da es ein Port meiner Python-Lösung ist. Wenn Sie es auf 1-indexiert werden sollen, ersetzen
print(a)
mitprint(a+1)
oder Online ausprobieren! .quelle
R , 5 Bytes
Dafür gibt es eine eingebaute Funktion.
quelle
order
ist bereits eine Funktion, so dass Sie nicht mit Eingaben umgehen müssenscan()
. Dies wären 5 Bytes.rank()
würde ein Byte speichernrank
answer by @JarkoDubbeldam, but I do not see it anymore.Ruby, 40 bytes
Try it online!
quelle
MATL, 2 bytes
Try it online!
Input and output are implicit.
quelle
J, 2 bytes
Try it online!
Zero-based indexing.
quelle
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.quelle
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
).quelle
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
quelle
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!
quelle
Clojure, 39 bytes
quelle
{map *.key,(sort *.value,(0..* Z=> @_))}
CJam, 12 bytes
Try it online!
quelle
MATLAB / Octave, 29 bytes
Try it online!
quelle
@(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
quelle
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!
quelle
Husk,
107 bytesThis is a direct port of my Haskell answer, also
1
-indexed:Try it online!
Ungolfed/Explained
quelle
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
.quelle
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.
quelle
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!
quelle
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!
quelle
Pari/GP, 16 bytes
Try it online!
quelle
PHP, 54 bytes
Try it online!
This is zero-indexed. Simply sorts the array and returns the keys.
quelle
<?php
tag is unnecessary for a function. 48 bytes.Tcl, 21 bytes
(0-indexed)
Try it online!
quelle