Reorganize uma determinada lista para que todos os números ímpares apareçam antes de todos os números pares. Além deste requisito, a lista de saída pode estar em qualquer ordem.
A entrada conterá apenas números inteiros, mas eles podem ser negativos, duplicatas e aparecer em qualquer ordem.
A solução mais curta vence.
Casos de teste
[1,2]
→ [1,2]
[2,1]
→ [1,2]
[1,0,0]
→ [1,0,0]
[0,0,-1]
→ [-1,0,0]
[3,4,3]
→ [3,3,4]
[-4,3,3]
→ [3,3,-4]
[2,2,2,3]
→ [3,2,2,2]
[3,2,2,2,1,2]
→ [1,3,2,2,2,2]
ou[3,1,2,2,2,2]
[-2,-2,-2,-1,-2,-3]
→ [-1,-3,-2,-2,-2,-2,]
ou[-3,-1,-2,-2,-2,-2,]
[]
→ []
Respostas:
05AB1E , 2 bytes
Experimente online!
fonte
Pitão ,
43 bytes-1 byte graças a isaacg
Experimente online!
riscado 4 ainda é regular 4
fonte
oiI2
.iD2
?oi2
J , 5 bytes
Experimente online!
\:
classificar decrescente por2&|
mod-2fonte
R ,
3024 bytesExperimente online!
-6 bytes graças a JayCe
fonte
C ++,
797664 bytesEssa função aceita um par de iteradores (que devem ser iteradores de acesso aleatório) e os move constantemente um para o outro. Quando
a
aponta para um número ímpar, é avançado. Caso contrário,a
aponta para um número par;b
é decrementado eiter_swap
editado coma
. (Usamos a troca XOR, o que nos impede de incluir<algorithm>
- ou a<utility>
favorstd::swap
).Há trocas desnecessárias quando
b
aponta para um número par, mas estamos jogando golfe, não diminuindo a eficiência!Demo
Resposta não competitiva
O método C ++ natural é
std::partition
, mas sai em 83 bytes:fonte
#include
diretiva. Minha matemática é péssima embora ^^. Você pode substituir!=
por-
, economizando 1 byte. Eu gosto da sua abordagem, é inteligente!while(a<b)
se for mais conveniente do quea!=b
usar aa-b
versão de @ OOBalance .algorithm
comregex
: codegolf.stackexchange.com/a/150895Japonês , 2 bytes
Experimente online!
fonte
Perl 6 , 12 bytes
Experimente online!
Algum código que classifique a entrada por paridade, com números ímpares primeiro. Você pode remover a
%
para obter os números pares primeiro. Observe que 'Whatever' é o nome desse tipo de função anônima.fonte
MATL, 6 bytes
Experimente no MATL Online
Alternativamente:
Experimente no MATL Online
fonte
Python 2 ,
3736 bytesExperimente online!
Dica de 1 byte do chapéu para o Sr. Xcoder .
fonte
~
deve funcionar em vez de1-
.Stax , 5 bytes
Execute e depure
Explicação:
fonte
Haskell ,
2322 bytesExperimente online! Isso é equivalente a
-1 byte graças a Lynn
Outras abordagens:
fonte
import Data.Semigroup
?(<>)
faz parte do Prelude . Como o TIO ainda executa uma versão mais antiga, a importação é necessária lá. Mas você está certo, eu deveria ter mencionado isso diretamente.k odd<>k even;k=filter
salva um byte.Anexo , 11 bytes
Experimente online!
Explicação
Even
retornatrue
para números pares efalse
caso contrário.SortBy
fileirasfalse < true
(por um elenco numérica a0 < 1
), colocando assim os números ímpares antes queridos mesmo.fonte
JavaScript (Node.js) , 29 bytes
Experimente online! Salve 4 bytes suportando apenas valores positivos usando
b%2-a%2
. Se você escrever isso como:então funcionará em todos os tipos de implementações antigas de JavaScript que não foram classificadas de maneira estável.
fonte
a=>a.sort((a,b)=>b&1-a&1)
funciona?b&(1-a)&1
.a=>a.sort(a=>++a&1)
é mais curto :)T-SQL, 26 bytes
Usa o operador AND bit a bit "&" para comparar o último dígito com 1.
EDIT: bit a bit NÃO é mais curto que adicionar 1. EDIT2: reordene para permitir a remoção do espaço.
fonte
ORDER BY~i&1
Geléia , 3 bytes
Experimente online!
Um dos átomos mais procurados parece ser o mesmo (o que daria 2 bytes), sem ele devemos reverter, acredito ...
fonte
JavaScript,
2220 bytesa=>a.sort(a=>!(a%2))
Experimente online!
fonte
a
.0
estiver incluído na matriz.[1,2,3,4,5,6,6,-1,-2,-3,-4]
. JavaScriptarray.sort
é estranho.PHP , 55 bytes
~ 14 meses depois e agora estou um pouco melhor no golfe:
Experimente online!
PHP (> = 5,4),
8482 bytes(-2 bytes, graças a Ismael Miguel )
Para executá-lo:
Exemplo:
Ou Experimente online!
fonte
$a=array_slice($argv,1);
, usearray_shift($a=&$argv);
, que economiza 1 byte. Além disso, remova o espaço antes$a
dejoin(' ', $a)
, salvando outro byte. Além disso, o PHP 5.3 fornece resultados diferentes. Você deve especificar para qual versão do PHP esta solução se destina.array_shift
idéia e apontando o erro de espaço. Não tenho certeza de como eu perdi o espaço: o DI também adicionou o PHP> = 5.4 no título.array_shift
quando tentei e trabalhei.Vermelho , 42 bytes
Experimente online!
Se precisarmos considerar valores negativos:
Vermelho , 43 bytes
Experimente online!
fonte
Casca , 4 bytes
Experimente online!
Explicação
fonte
Scala , 18 bytes
fonte
C #, 23 bytes
Muito direto: isso basicamente converte os números em booleanos, enquanto
true
significa que o número é par efalse
é ímpar. Porquetrue
é maior do quefalse
os números pares aparecem primeiro.A versão formatada é assim:
E você pode testá-lo assim:
O que resulta no seguinte:
fonte
JavaScript, 23 bytes
6 bytes menores que a resposta de @ Neil usando o mesmo idioma: D
Explicação:
A função passada para
sort
apenas se preocupa com o primeiro parâmetro. Se for ímpar, retorna-1
(o resultado de-(n&1)
). Caso contrário (quando-(n&1)
produz0
), ele retorna1
.Experimente online!
fonte
Python , 35 bytes
Experimente online!
Classifica pela função
x -> (-1)**x
, que fornece-1
para ímpar e1
para par.fonte
JavaScript (Chrome v67) -
241923 bytesO uso de, em
&1
vez de,Math.abs()%2
foi roubado do @Neil. Obrigado!Obrigado a @Shaggy por mostrar que minha solução hacky de 19 bytes não era válida. Se alguém quiser:
Depende de como o navegador lida com um valor de retorno hacky de0
. O Chrome v67, depois de 100000 iterações de matrizes aleatórias, nunca classificou errado. Tenho certeza de que funciona - e depende do algoritmo de classificação específico que o Chrome também usa, acredito. (Pode funcionar em outros navegadores, não é esse o ponto)a=>a.sort(a=>++a&1)
fonte
[-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
do meu console do Chrome 67, na saída[7,-5,-3,17,-1,15,1,13,3,11,5,9,2,19,14,-4,6,18,-2,16,0,10,8,12,4]
.JavaScript, 21 bytes
Experimente online
fonte
PowerShell ,
2219 bytesExperimente online!
Recebe entrada por meio de splatting, por exemplo,
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
que no TIO se manifesta como argumentos separados para cada entrada.Como algumas outras respostas aqui, você
Sort-Object
pode comparar com base em uma expressão. Aqui a expressão é!($_%2)
, ie, as probabilidades são classificadas$false
e os pares são classificados$true
. Graças à comparação dos valores booleanos, os valores de falsey são classificados primeiro. Isso move as probabilidades para o início da produção e os pares para o fim.Sort-Object
é estável, portanto, a ordem dos itens individuais em suas respectivas categorias não muda (como no exemplo do TIO).-3 bytes graças ao mazzy.
fonte
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
. Então$args|sort{!($_%2)}
é o suficiente. Não é?Ruby , 23 bytes
Experimente online!
Explicação:
sort_by
classifica cada número como se seu valor fosse o resultado do bloco (~i%2
)~x
é equivalente a-x-1
e tem precedência sobre%2
Os números ímpares serão avaliados em
0
e os pares serão avaliados em1
números ímpares, que serão classificados primeiro.Pouco relacionado: isso funciona no ruby do homebrew 2.5.1p57 (porque é baseado em um pequeno bug), mas apenas para números inteiros não negativos, 20 bytes
Explicação:
Isso usa
sort
que espera um bloco que recebe 2 valores e retorna-1
,0
ou1
dependendo se o primeiro é maior, eles são iguais ou o segundo é maior.O bloco fornecido aqui ignora o segundo valor e retorna
-1
se o primeiro número for ímpar ou0
se for par.Não é garantido que funcione, mas funciona em algumas implementações (acho que com erros).
fonte
Rotina de código de máquina 6502 , 47 bytes
Espera um ponteiro para uma matriz de números em
$fb
/$fc
e o comprimento dessa matriz em$fd
. Manipula a matriz no lugar para ter todos os números ímpares na frente. Este é um código independente da posição, portanto, nenhum endereço de carregamento é necessário.Como o 6502 é um chip de 8 bits (as instruções tratam apenas dos valores de 8 bits, opcionalmente assinados), o intervalo de números válido é
[-128 .. 127]
e o tamanho máximo do array é256
.Desmontagem comentada
Exemplo de programa assembler C64 usando a rotina:
Demonstração online
Código na sintaxe ca65 :
fonte
Elixir ,
3735 bytesCódigo:
Versão expandida:
Experimente online!
fonte
Clojure - 35 bytes
Ungolfed:
fonte
#(...)
. Você também podesort-by
tentar, embora o envio já exista.#()
função anônima, mas obteve um erro de aridade, pois dois parâmetros foram passados, mas apenas no esperado / usado, e a inclusão de%2
mais caracteres. Estaria interessado em ver como isso poderia ser feito.