Desafio:
Dada uma lista de números inteiros, classifique decrescente pelo (s) maior (s) dígito (s). A ordem dos números com o mesmo dígito maior é classificada pelo segundo maior dígito, etc.
Ignoramos dígitos duplicados nos números. E se todos os dígitos de um número forem iguais, a ordem desses números na lista poderá ser da maneira que você desejar.
Exemplo:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Por quê? Aqui estão os dígitos relevantes em que os números foram classificados:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Regras do desafio:
- Ignoramos dígitos duplicados, portanto,
478
e-7738
serão ordenados como478, -7738
, porque os dígitos maiores são[8,7,4]
e[8,7,3]
, e não[8,7,4]
e[8,7,7,3]
. - Se vários números tiverem os mesmos dígitos, a ordem deles poderá ser de qualquer maneira. Portanto,
373
e-73
pode ser classificado como ambos373, -73
ou-73, 373
(os dígitos são[7,3]
para esses dois números). - Se um número não contiver mais dígitos a serem verificados, será colocado na parte de trás dos números relevantes. Portanto,
123
e3120
será classificado como3120, 123
, porque os dígitos maiores[3,2,1]
são os mesmos, mas0
vêm antesnone
. - Você pode assumir que todos os números na entrada estão no intervalo
[-999999,999999]
. - Apenas uma das saídas possíveis é suficiente como resultado, mas você pode gerar todas as saídas possíveis, onde as sublistas podem estar em qualquer permutação, se você quiser (embora eu duvide que isso salvaria bytes em qualquer idioma).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
m:g/\d./
por.abs.comb
: tio.run/…Python 2 ,
605554 bytes-1 byte graças a Jonas Ausevicius .
Experimente online!
Ungolfed
Experimente online!
fonte
None
pode ser substituído porcmp
emsort
funçãoPython 2 ,
5860 byteslambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Experimente online!
fonte
Braquilog , 9 bytes
Nota: devido ao modo como a ordem funciona no braquilog, ela não funciona no número corretamente. Isso é corrigido lançando o número em uma sequência (
ṫ
) ao custo de 1 byte.Experimente online!
fonte
ṫ
(para string) corrige o problema. A ordenação de dígitos em um número decrescente funciona da seguinte maneira. Ordem do menor para o maior e depois inverter. O problema é que o número3120
ordenado do menor ao maior é0123
que é igual ao123
que reverteu é321
e não3210
ṫ
). Como mencionado por @Arnauld, achei que seu comentário significava que seu código atual não funciona. Talvez seja melhor mencioná-lo da seguinte maneira: " Isso pode ter sido 8 bytes removendo oṫ
(toString), mas infelizmente não funciona conforme o esperado devido à forma como a ordem funciona no Brachylog. "Pitão,
76 bytes-1 byte por @Sok
O Pyth, que usa apenas ASCII imprimível, é uma desvantagem aqui. Idealmente codificado, isso seria
6*log(95)/log(256) = 4.927
bytes, superando 05AB1E.Explicado:
Experimente aqui .
fonte
N
pode ser deixado de fora para salvar 1 byte - todas as funções do tipo lambda inferem a presença da variável lambda principal se houver algum argumento ausente no final. Exemplos incluemm
inferird
,f
deduzirT
,u
inferirG
...Geléia , 8 bytes
Experimente online!
Como funciona
fonte
Ṛ
inversões normais , e não com as reviravoltasU
. Observe, no entanto, que você não precisa daD
classificação since,,Ṣ
é implementada com umaiterable(z, make_digits=True)
chamada interna. Assim que foiAṢQṚµÞṚ
para 7.MathGolf ,
76 bytesExperimente online! ou como uma suíte de teste .
Explicação
Depois de analisar a solução 05AB1E da Emigna, descobri que não precisava do operador absoluto (e minha resposta anterior estava realmente incorreta por causa desse operador). Agora, a principal diferença é que eu converto em string e obtenho caracteres únicos em vez de usar o operador de 1 byte em 05AB1E.
fonte
Japonês , 12 bytes
Todos os casos de teste
Explicação:
fonte
Haskell ,
5452 bytesExperimente online!
fonte
r=reverse
salva dois bytes. Também permitimos funções anônimas, paraf=
que não seja necessário contar.f=r$r id.nub.show;r=(reverse.).sortOn
.Stax ,
67 bytesExecute e depure
fonte
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
vez do8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
ou pretendido8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. Este caso de teste também é usado no exemplo e para explicar as regras, então eu daria uma olhada nisso para entender melhor. Parece que você está classificando apenas o maior dígito uma vez, sem nenhuma das outras regras?APL (Dyalog Extended) , 19 bytes
Experimente online!
Corrigido com um custo de +2 bytes, graças ao OP.
fonte
¯7738
é colocado antes478
, mas deve ser depois: os dígitos[8,7,4]
vêm antes dos dígitos[8,7,3]
.C (gcc) ,
114111109 bytesExperimente online!
Explicação:
f () usa qsort () para classificar a matriz fornecida no local. Usando a função de comparação c () para comparar números que avalia números usando v (). v () calcula um número maior se dígitos maiores estiverem presentes no parâmetro
[Editar 1] Melhorado por 3 bytes. 2 créditos de bytes para Kevin. obrigado
[Edit 2] Mais 2 bytes melhorados. Créditos ao gastropner. obrigado
fonte
n>0
paran
eu acho que em seu ciclo do seu métodov
.int*a,n
pode ser reduzida paraint*a
.for(a=0;n=abs(n);
vez den=n<0?-n:n;for(a=0;n;
J , 17 bytes
Experimente online!
Explicação:
fonte
JavaScript (SpiderMonkey) , 68 bytes
Obrigado por @Arnauld por me lembrar novamente que o SpiderMonkey usa classificação estável, portanto -4 bytes para remover
||-1
.Experimente online!
JavaScript (Node.js) , 72 bytes
Experimente online!
fonte
Java (JDK) , 98 bytes
Experimente online!
Explicação
Nota:
Eu precisava de uma maneira de mapear números para um
0/1
ou outro0/-1
.indexOf
tem a propriedade legal de retornar consistentemente-1
caracteres não encontrados.-1
Shift à direita por qualquer número é sempre-1
. Qualquer número positivo deslocado para a direita por um número grande o suficiente sempre produzirá0
.Então aqui estamos nós:
fonte
>>9
vez de>>32
devido ao intervalo limitado de números.Ruby , 55 bytes
Experimente online!
fonte
Perl 5
-nl
, 68 bytesExperimente online!
fonte
Julia 1.0 , 50 bytes
Experimente online!
fonte
APL (NARS), 366 caracteres, 732 bytes
Para o operador qsort, é uma tradução no APL de algo na página 139 K&R Linguaggio C. Acho que nele existem dados como C com ponteiros ... Teste
fonte
Powershell, 44 bytes
Script de teste:
Saída:
fonte
PHP,
87 8684 bytesCorra com
-nr
ou experimente online .Substitua
++$i
por$argc
(+1 byte) para suprimir o Aviso (e tornar-n
obsoleto).demolir
-
é "menor" que os dígitos, portanto não afeta a classificação.fonte
Lisp comum, 88 bytes
Experimente online!
Bom e velho verboso Common Lisp!
Explicação:
fonte
C # (compilador interativo do Visual C #) ,
7574 bytes-1 obrigado @ somente ASCII
Experimente online!
Em C #, cadeias de caracteres são consideradas "enumeráveis" de caracteres. Eu uso isso para minha vantagem, primeiro convertendo cada número em uma string. O LINQ é então alavancado para obter os caracteres únicos (dígitos) classificados na ordem inversa. Eu converto cada matriz de caracteres classificados novamente em uma string e a uso como a chave de classificação para ordenar a lista inteira.
fonte
-
, parece que a ordem deles realmente não importa?-
retorno do caso de teste nº 2, o... 321 2132 ...
que parece incorreto?