Seu desafio hoje é escrever um programa ou função que faça uma lista l
e dê as posições nas l
quais cada elemento sucessivo da l
classificação aparece.
Em outras palavras, imprima o índice do menor valor, seguido pelo índice do segundo menor valor, etc.
Você pode assumir que a matriz de entrada conterá apenas números inteiros positivos e conterá pelo menos um elemento.
Casos de teste:
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]
Quando dois ou mais elementos com o mesmo valor aparecerem, seus índices deverão aparecer próximos um do outro, do menor para o maior.
Isso é código-golfe , o menor número de bytes vence!
code-golf
array-manipulation
Pavel
fonte
fonte
Respostas:
Geléia , 1 byte
Experimente online!
fonte
Dyalog APL, 1 byte
O Dyalog APL possui uma função de
operadorintegrada (obrigado Zacharý por esclarecer isso) para fazer isso.Exemplo
Aqui, estou indexando na lista pelos índices classificados para retornar a lista em ordem crescente.
fonte
⍋
são considerados funções, enquanto coisas como¨⍨⍣.∘/\⌿⍀⌸⍤
são operadores.Haskell ,
4342 bytes1
-indexed:Experimente online!
-1
byte graças a @ ØrjanJohansen!fonte
map snd.sort.(`zip`[1..])
.Python 2 , 56 bytes
Esta solução é indexada em 0. Isso abusa do fato de
sorted()
criar uma cópia da lista original.Experimente online!
fonte
Javascript (ES6), 39 bytes
-2 bytes graças a @powelles
Isso funciona apenas em navegadores onde
Array.prototype.sort
é estável.Versão indexada em 1 (47 bytes):
Exemplo de trecho de código:
fonte
[...a.keys()]
em vez dea.map((_,i)=>i)
, você economizará alguns bytes.Python 2 , 48 bytes
Experimente online!
fonte
__<blahblah>__
sintaxe). Vou fazer alguma Jelly, eu não quero perder a minha formação :)Perl 6 ,
2721 bytesTeste-o
Teste-o
Inspirado por uma resposta Python
Expandido:
fonte
Bash + coreutils, 20
Experimente online .
fonte
Swift 4 , 82 bytes
Suíte de teste.
Explicação
No Swift,
l.sorted()
cria uma cópia classificada da matriz original. Fazemos um loop pelos elementos classificados na lista e após imprimir o índice de cada item na matriz original comlet a=l.index(of:k)!;print(a)
e, a fim de manter os índices corretos na matriz, atribuímosl[a]
a ela0
, porque isso não afeta nossa saída normal.Observe que esse índice é 0, pois é uma porta da minha solução Python. Se você deseja que ele seja indexado 1, substitua
print(a)
porprint(a+1)
ou Experimente on-line! .fonte
R , 5 bytes
Existe uma função interna para isso.
fonte
order
já é uma função, para que você não precise manipular as entradas usandoscan()
. Isso seria 5 bytes.rank()
salvaria um byterank
resposta de @JarkoDubbeldam, mas não a vejo mais.Ruby , 40 bytes
Experimente online!
fonte
MATL , 2 bytes
Experimente online!
Entrada e saída estão implícitas.
fonte
J , 2 bytes
Experimente online!
Indexação baseada em zero.
fonte
Oitava , 17 bytes
Experimente online!
O Octave é como o MATLAB, mas com atribuição em linha, possibilitando coisas que causam dores de cabeça ao pessoal do Mathworks HQ. Não importa como você chama
y
, mas você não pode prescindir dessa variável fictícia, até onde eu sei.fonte
MEU , 3 bytes
MY também tem um builtin para isso!
Experimente online!
Quão?
Entrada avaliada, classificação superior e saída com uma nova linha.
Indexado, no entanto, você define o índice com
⌶
/0x48
. (Pode até ser um número inteiro estranho como-1
ou2
, o padrão é1
).fonte
Java 8, 128 + 19 = 147 bytes
Baseado na solução do Sr. Xcoder . Baseado em 0. O Lambda recebe a entrada como
Integer[]
e retornaInteger[]
. A contagem de bytes inclui expressão lambda e importação necessária.Experimente Online
Lambda ungolfed
Notas
Eu uso em
Integer[]
vez deint[]
permitir o uso deArrays.asList
, que não tem versões primitivas.Integer
é preferido paraLong
porque os valores são usados como índices de matriz e exigiriam conversão.Isso acabou sendo mais curto do que o meu melhor estilo processual
List
solução no , devido ao custo dos nomes de classe e método.Isso também superou uma solução que tentei que transmitia as entradas, mapeadas para (valor, índice) pares , classificadas em valores e mapeadas para índices, principalmente por causa da bagagem necessária para coletar o fluxo.
Agradecimentos
fonte
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 comum, 82 bytes
Experimente online!
fonte
Clojure, 39 bytes
fonte
{map *.key,(sort *.value,(0..* Z=> @_))}
CJam , 12 bytes
Experimente online!
fonte
MATLAB / oitava , 29 bytes
Experimente online!
fonte
@(X)([~,y]=sort(X))
e, enquanto procurava uma maneira de obtery
isso, percebi quey
era realmente o valor de retorno da tarefa, e uma inspeção mais detalhada revelou que nem eram necessários colchetes. O MATLAB gosta de tudo explícito; Oitava é feliz quando é inequívoco.JavaScript (ES6), 69 bytes
Indexado a 0. Funciona para listas que contêm até 65.536 elementos.
Casos de teste
Mostrar snippet de código
fonte
n=>a.indexOf(n)
para apenasa.indexOf
?Array#map
passa 3 argumentos para a função de retorno de chamada eArray#indexOf
espera 2, para dar resultados indesejáveis.Python 3 , 52 bytes
Indexado a 0. Baseado na resposta Haskell de Bruce Forte aqui e Ruby da GB aqui .
Experimente online!
fonte
Casca ,
107 bytesEsta é uma porta direta da minha resposta Haskell , também
1
indexada:Experimente online!
Ungolfed / Explained
fonte
Java (OpenJDK 8) , 72 bytes
Experimente online!
Leva um
List<Integer>
, retorna umaStream<Integer>
contendo os resultados.Obtemos um fluxo com base na lista inicial, classificamos e mapeamos cada número para seu índice na lista. Para acomodar elementos duplicados, definimos o elemento original na lista como
0
.fonte
SmileBASIC, 67 bytes
Muito simples, basta gerar uma lista de números de 1 a (comprimento da matriz) e classificá-la pela mesma ordem que a entrada.
fonte
Python 3 com Numpy ,
3826 bytes12 bytes salvos graças a Jo King (não é necessário dar um nome à função)
A saída é baseada em 0.
Experimente online!
fonte
numpy.argsort
sem a parte lambdanumpy.argsort;import numpy
eu recebo um erro (numpy
ainda não foi importado) e comimport numpy;numpy.argsort
eu preciso passarf=
para a parte do código. Você sabia que o procedimento padrão é nesses casos? Mover of=
e não contar?f=numpy.argsort
no rodapé05AB1E , 4 bytes
Experimente online!
fonte
Pari / GP , 16 bytes
Experimente online!
fonte
PHP , 54 bytes
Experimente online!
Isso é zero-indexado. Simplesmente classifica a matriz e retorna as chaves.
fonte
<?php
tag é desnecessária para uma função. 48 bytes.Tcl , 21 bytes
(Indexado a 0)
Experimente online!
fonte