Su desafío hoy es escribir un programa o función que tome una lista l
y dé las posiciones en las l
que l
aparece cada elemento sucesivo de ordenado.
En otras palabras, muestre el índice del valor más pequeño, seguido del índice del segundo valor más pequeño, etc.
Puede suponer que la matriz de entrada contendrá solo enteros positivos y contendrá al menos un elemento.
Casos de prueba:
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]
Cuando aparecen dos o más elementos con el mismo valor, sus índices deben aparecer uno al lado del otro, de menor a mayor.
Este es el código de golf , ¡gana la menor cantidad de bytes!
Respuestas:
Jalea , 1 byte
Pruébalo en línea!
fuente
Dyalog APL, 1 byte
Dyalog APL tiene una función de
operadorincorporada (gracias Zacharý por aclarar esto) para hacer esto.Ejemplo
Aquí estoy indexando en la lista por los índices ordenados para devolver la lista en orden ascendente.
fuente
⍋
se consideran funciones, mientras que cosas como¨⍨⍣.∘/\⌿⍀⌸⍤
los operadores.Haskell ,
4342 bytes1
-indexado:Pruébalo en línea!
-1
byte gracias a @ ØrjanJohansen!fuente
map snd.sort.(`zip`[1..])
.Python 2 , 56 bytes
Esta solución está indexada en 0. Esto abusa del hecho de que
sorted()
crea una copia de la lista original.Pruébalo en línea!
fuente
Javascript (ES6), 39 bytes
-2 bytes gracias a @powelles
Esto solo funciona en navegadores donde
Array.prototype.sort
es estable.Versión indexada 1 (47 bytes):
Fragmento de código de ejemplo:
fuente
[...a.keys()]
en lugar dea.map((_,i)=>i)
le ahorrará un par de bytes.Python 2 , 48 bytes
Pruébalo en línea!
fuente
__<blahblah>__
sintaxis). Haré un poco de gelatina, no quiero perder mi entrenamiento :)Perl 6 ,
2721 bytesPruébalo
Pruébalo
Inspirado en una respuesta de Python
Expandido:
fuente
Bash + coreutils, 20
Pruébalo en línea .
fuente
Swift 4 , 82 bytes
Banco de pruebas.
Explicación
En Swift,
l.sorted()
crea una copia ordenada de la matriz original. Recorremos los elementos ordenados en la lista y después de imprimir el índice de cada elemento en la matriz original conlet a=l.index(of:k)!;print(a)
, y luego, para mantener los índices correctos en la matriz, asignamosl[a]
a0
, porque no afecta nuestra salida normal.Tenga en cuenta que esto está indexado en 0, ya que es un puerto de mi solución Python. Si usted quiere que sea indexada 1, sustituir
print(a)
conprint(a+1)
o Pruébelo en línea! .fuente
R , 5 bytes
Hay una función integrada para esto.
fuente
order
ya es una función, por lo que no tiene que manejar la entrada usandoscan()
. Esto sería de 5 bytes.rank()
ahorraría un byterank
respuesta de @JarkoDubbeldam, pero ya no la veo.Rubí , 40 bytes.
Pruébalo en línea!
fuente
MATL , 2 bytes
Pruébalo en línea!
La entrada y la salida son implícitas.
fuente
J , 2 bytes
Pruébalo en línea!
Indexación basada en cero.
fuente
Octava , 17 bytes
Pruébalo en línea!
Octave es como MATLAB pero con asignación en línea, lo que hace posible las cosas que le dan dolor de cabeza a la gente de Mathworks HQ. No importa cómo llame
y
, pero no puedo prescindir de esa variable ficticia, que yo sepa.fuente
MI , 3 bytes
¡MY también tiene un incorporado para esto!
Pruébalo en línea!
¿Cómo?
Entrada evaluada, subir de nivel, luego salida con una nueva línea.
Indexado sin embargo establece el índice, con
⌶
/0x48
. (Incluso puede ser un número entero extraño como-1
o2
, el valor predeterminado es1
).fuente
Java 8, 128 + 19 = 147 bytes
Basado en la solución del Sr. Xcoder . Basado en 0. Lambda toma la entrada como an
Integer[]
y regresaInteger[]
. El recuento de bytes incluye la expresión lambda y la importación requerida.Pruébalo en línea
Lambda sin golf
Notas
Utilizo en
Integer[]
lugar deint[]
permitir el uso deArrays.asList
, que no tiene versiones primitivas.Integer
se prefiereLong
porque los valores se usan como índices de matriz y requerirían conversión.Esto terminó siendo más corto que mi mejor estilo de procedimiento
List
solución de debido al costo de los nombres de clase y método.Esto también superó una solución que probé que transmitía las entradas, asignadas a (valor, índice) pares , ordenaba por valores y asignaba a índices, principalmente debido al equipaje necesario para recopilar la transmisión.
Expresiones de gratitud
fuente
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).Lisp común, 82 bytes
Pruébalo en línea!
fuente
Clojure, 39 bytes
fuente
{map *.key,(sort *.value,(0..* Z=> @_))}
CJam , 12 bytes
Pruébalo en línea!
fuente
MATLAB / Octave , 29 bytes
Pruébalo en línea!
fuente
@(X)([~,y]=sort(X))
, y mientras buscaba una forma de obtenery
esto, me di cuenta de que eny
realidad era el valor de retorno de la asignación, y una inspección más cercana reveló que ni siquiera se necesitaban corchetes. A MATLAB le gusta todo lo explícito; Octave es feliz cuando no es ambiguo.JavaScript (ES6), 69 bytes
0 indexado. Funciona para listas que contienen hasta 65.536 elementos.
Casos de prueba
Mostrar fragmento de código
fuente
n=>a.indexOf(n)
a justoa.indexOf
?Array#map
pasa 3 argumentos a la función de devolución de llamada yArray#indexOf
espera 2, por lo que dará resultados no deseados.Python 3 , 52 bytes
0 indexado. Basado en la respuesta Haskell de Bruce Forte aquí y la respuesta Ruby de GB aquí .
Pruébalo en línea!
fuente
cascarilla ,
107 bytesEste es un puerto directo de mi respuesta de Haskell , también
1
-indexado:Pruébalo en línea!
Sin golf / Explicado
fuente
Java (OpenJDK 8) , 72 bytes
Pruébalo en línea!
Toma un
List<Integer>
, devuelve unStream<Integer>
contiene los resultados.Obtenemos un flujo basado en la lista inicial, lo clasificamos, luego asignamos cada número a su índice en la lista. Para acomodar elementos duplicados, establecemos el elemento original en la lista en
0
.fuente
SmileBASIC, 67 bytes
Muy simple, todo lo que hace es generar una lista de números del 1 al (longitud de la matriz) y ordenar esto en el mismo orden que la entrada.
fuente
Python 3 con Numpy ,
3826 bytes12 bytes guardados gracias a Jo King (no es necesario darle un nombre a la función)
La salida está basada en 0.
Pruébalo en línea!
fuente
numpy.argsort
sin la parte lambdanumpy.argsort;import numpy
recibo un error (numpy
aún no se ha importado), y conimport numpy;numpy.argsort
necesito pasarf=
a la parte del código. ¿Sabes que el procedimiento estándar es en estos casos? ¿Moverf=
y no contarlo?f=numpy.argsort
en el pie de página05AB1E , 4 bytes
Pruébalo en línea!
fuente
Pari / GP , 16 bytes
Pruébalo en línea!
fuente
PHP , 54 bytes
Pruébalo en línea!
Esto está indexado a cero. Simplemente ordena la matriz y devuelve las claves.
fuente
<?php
etiqueta es innecesaria para una función. 48 bytes.Tcl , 21 bytes
(0 indexado)
Pruébalo en línea!
fuente