Inspirado por esta pergunta de estouro de pilha: Classificando uma lista: números em ordem crescente, letras em ordem decrescente . Sua tarefa é resolver o seguinte problema e, como esse é o código-golfe , você deve fazê-lo com o menor número de bytes possível.
Você deve ter uma lista de objetos como entrada contendo letras (qualquer forma razoável: string
, char
, etc) e números. Você deve classificar os números em ordem crescente e as letras em ordem decrescente. No entanto, você deve manter as letras nas posições das letras e os números nas posições numéricas. Por exemplo, se a lista for:
[L, D, L, L, D, L]
A lista de saída deve estar na forma de:
[L, D, L, L, D, L]
Trabalhar com
Entrada: ['a', 2, 'b', 1, 'c', 3]
- Classifique os números em ordem crescente:
[1, 2, 3]
- Classifique as letras em ordem decrescente:
['c', 'b', 'a']
- Junte-os de volta, mas mantenha a ordem da mesma forma:
['c', 1', 'b', 2, 'a', 3]
Regras
- A lista conterá apenas letras e dígitos.
- A lista pode estar vazia.
- A lista pode conter apenas letras ou apenas dígitos.
- Se o seu idioma não suportar matrizes de tipo misto, você poderá usar caracteres de dígito em vez de números. Observe que se o seu idioma suportar isso, você deverá usar tipos mistos.
- As letras serão apenas
[a-z]
ou[A-Z]
, você pode escolher qual delas. - As letras são classificadas como
a
sendo as mais baixas,z
ou seja , as mais altasa = 1, z = 26
. - As brechas padrão são proibidas.
- A E / S pode ser realizada por qualquer meio padrão, incluindo uma string.
Casos de teste
[5, 'a', 'x', 3, 6, 'b'] -> [3, 'x', 'b', 5, 6, 'a']
[ 3, 2, 1] -> [ 1, 2, 3 ]
[ 'a', 'b', 'c' ] -> [ 'c', 'b', 'a' ]
[] -> []
[ 2, 3, 2, 1 ] -> [1, 2, 2, 3]
Como este é o código-golfe, a resposta mais curta em bytes vence!
fonte
Respostas:
Retina , 10 bytes
Experimente online!
O
O
estágio na Retina pode executar diretamente o tipo de classificação seletiva exigida por esse desafio.Aqui, a primeira linha classifica os dígitos, enquanto a segunda linha classifica os não dígitos no sentido inverso.
fonte
Python 2 ,
5352 bytes-2 bytes graças a g.rocket
-1 byte graças a Jonathan Frech
Experimente online!
A
sorted
lista terá os números primeiro e, em seguida, os caracteres como[3, 5, 6, 'a', 'b', 'x']
, em seguida, usee<x
para filtrar o que é número e o que é caractere. Em python, qualquer número é menor que uma lista (entrada) e uma lista é menor que uma string.fonte
IndexError: pop index out of range
. A solução anterior funcionou.1-(e<'`')
deveria ser(e<'`')-1
. Você acabou de colocá-los na ordem errada. BTW, você ninja'd me: / Eu tinha issoe>x
APL (Dyalog) ,
2726 bytesEspera que os caracteres estejam em maiúsculas
Experimente online!
Este é apenas dois aplicativos do formulário
f@g
, aplique a funçãof
nos itens indicados porg
.Para o primeiro uso que aplicação:
f
:⍒⊃¨⊂
as notas descendentes (⍒
) cada escolha (⊃¨
) de todo o argumento (⊂
).g
:(e←∊∘⎕A)
members (∊
) of (∘
) the A lphabet (⎕A
) e store (←
) funcionam comoe
.Para o segundo uso que aplicação:
f
:⍋⊃¨⊂
as notas ascendentes (⍋
) cada escolha (⊃¨
) de todo o argumento (⊂
).g
:(~e)
not (~
) membros do alfabeto (e
; a função que armazenamos anteriormente)fonte
83=⎕DR¨⍵
3=10|⎕DR
para números inteiros?⌊0.1×⎕DR
fornece o número de bits usados para representar cada escalar, exceto os ponteiros, que dependem da arquitetura, mas sempre são 326. Portanto, todos os números são2|⎕DR
.JavaScript (ES6),
715147 bytesEconomizou 20 bytes apenas usando
sort()
, como sugerido por @JustinMarinerEconomizou mais 4 bytes graças a @CraigAyre
Usando uma abordagem semelhante à resposta de Rod's em Python :
Casos de teste
Mostrar snippet de código
fonte
sort
função e apenas usarsort()
por conta própria? Parece classificar da mesma maneira sem uma função (no Chrome / FF / Edge).sort()
falharia. Mas como estamos limitados a dígitos, você está correto: isso funciona. Obrigado!a.sort()
cada loop em vez de atribuir ax
:?.map(n=>a.sort()[1/n?'shift':'pop']())
+n
pode ser usado em vez de1/n
R ,
8376 bytes-7 bytes graças a Miff
É o mesmo que o abaixo, mas permite a entrada de tipos mistos como um vetor,
list
e não como umatomic
vetor (o que tipifica tudo como caracteres com tipos mistos).Experimente online!
R ,
68bytes 61-7 bytes graças a Miff
Função anônima. Todos os dígitos são convertidos em caracteres neste caso.
n[-d]
é a matriz sem os dígitos. RetornaNULL
(lista vazia) na entrada vazia.Experimente online!
fonte
d=n%in%0:9
Japonês ,
1815 bytesObrigado @Shaggy por -3 bytes e pela ajuda na correção de matrizes com
0
s.A primeira linha é intencionalmente deixada em branco.
Experimente online! usando
-Q
para visualizar a matriz formatada.Explicação
A primeira linha está em branco para evitar a substituição da matriz de entrada.
[5, 'a', 'x', 3, 6, 'b']
Faça uma cópia achatando (
c
) a matriz de entrada e, em seguida, ordene (ñ
) com as strings representadas pelo código de char (c
). Isso é armazenado emV
.[3, 5, 6, 'a', 'b', 'x']
Em seguida, mapeie a matriz de entrada pela função ...
Transforme números em strings binários (truthy) ou strings em
""
(falsy) (¤
). Se for verdade, remova desde o início doV
(v
), caso contrário, remova do final (o
).fonte
Vo
eVv
ao redor. Estou convencido de que deve haver um caminho mais curto, sem o ternário.o
poderia remover desde o início com valores negativos ou algo assim ...JavaScript,
164162158142 bytesedite 1: 2 bytes a menos após remover uma atribuição redundante de v.
edite 2: 4 bytes a menos graças ao TheLethalCoder.
editar 3: 16 bytes a menos graças às dicas brilhantes de Justin Mariner
É a minha primeira vez no code-golf, por isso certamente pode ser melhorado ... Mas ainda assim, vale a pena tentar.
O programa executa uma variante da classificação de seleção, que leva em consideração apenas os valores do mesmo tipo que o atual (trocando apenas um número e um número, ou uma letra e uma letra)
Formulário legível:
fonte
for(j=i+1;j<l;j++)
->for(j=i++;++j<l;)
e remova o incremento no loop externo.j
como sugeri, eu não vi você usari
mais abaixo apenas mudarx[i]=x[m]
muitox[i++]=x[m]
x[i++]=x[m]
... Obrigado!C ++ 17 (gcc) , 219 bytes
Experimente online!
Dificilmente competitivo. Mas devo suportar matrizes de tipo misto? BEM.
Aceita uma matriz de variantes no estilo de intervalo e modifica-o no lugar. Copia a entrada em dois conjuntos classificados e depois na matriz de entrada / saída.
fonte
void *
C;) Mas, sim, interessante ver uma solução pulando por um aro tão grande.#include
sMathematica, 203 bytes
Experimente online!
fonte
Gelatina , 14 bytes
Experimente online!
Basicamente, um porto da solução Python da Rod .
fonte
Pitão ,
1211 bytesExperimente online! ou Experimente o conjunto de testes.
Explicação
fonte
Python,
145139130 bytes6 bytes salvos graças a @officialaimm
9 bytes salvos graças a @Chris_Rands
Experimente online!
fonte
type(x)==str
iria salvar alguns bytes sobre o usoisinstance(...)
eu acho05AB1E , 17 bytes
Experimente online!
Usar o fechamento ordenado na verdade foi pior:
Σ©Ç®ai0<*}}¹SaJsvyay.;
fonte
Python 3, 77 bytes
Esta resposta é baseada no comentário que diz que você pode usar '1', '2', etc., se caracteres e dígitos não forem comparáveis no idioma. 'a' e 1 não são comparáveis no Python 3.
fonte
q / kdb +,
5453 bytesSolução:
Exemplos:
Explicação:
Encontre os caracteres na lista, classifique-os em ordem decrescente, encontre os compridos na lista, classifique-os em ordem crescente, junte-se para obter uma lista de, por exemplo
("x";"b";"a";3;5;6)
, em seguida, atribua os valores classificados de volta às suas posições originais na lista, por exemplo, em0 3 4 1 2 5
.Golfe é apenas trocar q palavras-chave (
each
,where
enot
) pelo seuk
equivalente (o que exige que elas sejam colocadas entre colchetes).Edições
desc
fonte
C (gcc) ,
125113110 bytesExperimente online!
Explicado:
Letras são esperadas em maiúsculas.
fonte
PHP, 66 bytes:
recebe entrada dos argumentos da linha de comando, imprime uma string. Corra com
-nr
ou experimente online .Emite um aviso no PHP 7.1; substitua
a&
por""<
para corrigir.fonte
Mathematica, 107 bytes
fonte
C # (.NET Core) , 171 bytes
A contagem de bytes também inclui:
Experimente online!
Explicação:
fonte
Perl 5 , 107 + 1 (-n) = 108 bytes
Experimente online!
fonte
Ruby , 265 bytes
Experimente online!
Primeiro temporizador aqui, minha solução definitivamente não é a melhor. Mas como essa é minha primeira resposta, pensei em postar apenas por diversão.
Olhando para a frente para ver melhores respostas Ruby, para ver qual é a melhor abordagem. Espero melhorar nas respostas futuras =)
Legível
fonte
Haskell, 108 bytes
Pode haver maneiras mais curtas, mas eu apenas tive que tentar com a
Lens
biblioteca.Eu poderia definir
f
apenas a composição das duasi
invocações, mas ainda precisaria aplicarx
a ela para evitar um erro de tipo da restrição de monomorfismo. Observe que o tipo def
éTraversable t => t Char -> t Char
para que ele possa ser usado comString
s, que são listas deChar
s e também com matrizes deChar
s.Aqui estão os casos de teste:
fonte
Python 3, 91 bytes
fonte
Clojure, 151 bytes
Example:
This calculates the cumulative
sumcount of integers and characters, and uses it to lookup the correct element from a sorted list of corresponding type's elements.fonte
APL (Dyalog), 26 bytes
(uses
⎕IO=1
)Try it online!
fonte