Reorganice una lista dada de modo que todos los números impares aparezcan antes de todos los números pares. Además de este requisito, la lista de salida puede estar en cualquier orden.
La entrada solo contendrá enteros, pero pueden ser negativos y puede haber duplicados, y pueden aparecer en cualquier orden.
La solución más corta gana.
Casos de prueba
[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]
o[3,1,2,2,2,2]
[-2,-2,-2,-1,-2,-3]
→ [-1,-3,-2,-2,-2,-2,]
o[-3,-1,-2,-2,-2,-2,]
[]
→ []
Respuestas:
05AB1E , 2 bytes
Pruébalo en línea!
fuente
Pyth ,
43 bytes-1 byte gracias a isaacg
Pruébalo en línea!
tachado 4 sigue siendo regular 4
fuente
oiI2
.iD2
?oi2
J , 5 bytes
Pruébalo en línea!
\:
ordenar descendiendo por2&|
mod-2fuente
R ,
3024 bytesPruébalo en línea!
-6 bytes gracias a JayCe
fuente
C ++,
797664 bytesEsta función acepta un par de iteradores (que deben ser iteradores de acceso aleatorio) y los mueve constantemente uno hacia el otro. Cuando
a
apunta a un número impar, se avanza. De lo contrario,a
apunta a un número par;b
es decrementado yiter_swap
editado cona
. (Utilizamos XOR swap, lo que nos ahorra tener que incluir<algorithm>
- o<utility>
parastd::swap
).Hay intercambios innecesarios cuando
b
apunta a un número par, ¡pero estamos jugando al golf, no exprimiendo la eficiencia!Manifestación
Respuesta no competitiva
El método natural de C ++ es
std::partition
, pero eso sale a 83 bytes:fuente
#include
directiva. Mis matemáticas apestan aunque ^^. Puede reemplazar!=
con-
, ahorrando 1 byte. Me gusta tu enfoque, ¡es inteligente!while(a<b)
si es más conveniente quea!=b
usar unaa-b
versión de @ OOBalance .algorithm
porregex
: codegolf.stackexchange.com/a/150895Japt , 2 bytes
Pruébalo en línea!
fuente
Perl 6 , 12 bytes
Pruébalo en línea!
Algunos Cualquier código que ordene la entrada por paridad, con números impares primero. Puede eliminar a
%
para obtener números pares primero. Tenga en cuenta que 'Cualquiera' es el nombre de este tipo de función anónima.fuente
MATL, 6 bytes
Pruébalo en MATL Online
Alternativamente:
Pruébalo en MATL Online
fuente
Python 2 ,
3736 bytesPruébalo en línea!
Punta de 1 byte del sombrero para el Sr. Xcoder .
fuente
~
debería funcionar en lugar de1-
.Stax , 5 bytes
Ejecutar y depurarlo
Explicación:
fuente
Haskell ,
2322 bytesPruébalo en línea! Esto es equivalente a
-1 byte gracias a Lynn
Otros enfoques:
fuente
import Data.Semigroup
?(<>)
es parte de Prelude . Como TIO todavía ejecuta una versión anterior, la importación es necesaria allí. Pero tienes razón, debería haber mencionado esto directamente.k odd<>k even;k=filter
Guarda un byte.Adjunto , 11 bytes
Pruébalo en línea!
Explicación
Even
devuelvetrue
para números pares y defalse
otra manera.SortBy
rangosfalse < true
(por un reparto numérico a0 < 1
), colocando números impares antes de los paresfuente
JavaScript (Node.js) , 29 bytes
Pruébalo en línea! Ahorre 4 bytes al admitir solo valores positivos con
b%2-a%2
. Si escribe esto como:entonces funcionará en todo tipo de implementaciones de JavaScript antiguas que no se ordenaron de manera estable.
fuente
a=>a.sort((a,b)=>b&1-a&1)
funcionab&(1-a)&1
.a=>a.sort(a=>++a&1)
es más corto :)T-SQL, 26 bytes
Utiliza el operador AND "bit a bit" para comparar el último dígito con 1.
EDITAR: A nivel de bits NO, entonces más corto que agregar 1. EDITAR2: Reordenar para permitir la eliminación del espacio.
fuente
ORDER BY~i&1
Jalea , 3 bytes
Pruébalo en línea!
Uno de los átomos más buscados parece ser uno par (lo que haría que estos 2 bytes), sin él debemos revertir, creo ...
fuente
JavaScript,
2220 bytesa=>a.sort(a=>!(a%2))
Pruébalo en línea!
fuente
a
.0
está incluido en la matriz.[1,2,3,4,5,6,6,-1,-2,-3,-4]
. JavaScriptarray.sort
es raro.PHP , 55 bytes
~ 14 meses después y ahora estoy un poco mejor jugando al golf:
Pruébalo en línea!
PHP (> = 5.4),
8482 bytes(-2 bytes, gracias a Ismael Miguel )
Para ejecutarlo:
Ejemplo:
O Pruébelo en línea!
fuente
$a=array_slice($argv,1);
, usearray_shift($a=&$argv);
, que ahorra 1 byte. Además, elimine el espacio antes$a
enjoin(' ', $a)
, guardando otro byte. Además, PHP 5.3 da resultados diferentes. Debe especificar para qué versión de PHP es esta solución.array_shift
idea y por señalar el error espacial. No estoy seguro de cómo perdí el espacio: DI también he agregado PHP> = 5.4 en el título.array_shift
cuando lo probé y funcioné.Rojo , 42 bytes
Pruébalo en línea!
Si necesitamos tener en cuenta los valores negativos:
Rojo , 43 bytes
Pruébalo en línea!
fuente
Casco , 4 bytes
Pruébalo en línea!
Explicación
fuente
Scala , 18 bytes
fuente
C #, 23 bytes
Realmente bastante directo: esto básicamente convierte los números en booleanos, mientras
true
que significa que el número es par yfalse
que es impar. Porquetrue
es más alto quefalse
los números pares aparecen primero.La versión formateada se ve así:
Y puedes probarlo así:
Lo que resulta en lo siguiente:
fuente
JavaScript, 23 bytes
6 bytes más cortos que la respuesta de @ Neil usando el mismo idioma: D
Explicación:
La función pasada a
sort
solo se preocupa por el primer parámetro. Si es impar, devuelve-1
(el resultado de-(n&1)
). De lo contrario (cuando-(n&1)
rinde0
) vuelve1
.Pruébalo en línea!
fuente
Python , 35 bytes
Pruébalo en línea!
Ordena por la función
x -> (-1)**x
, que da-1
por impar y1
por par.fuente
JavaScript (Chrome v67) -
241923 bytesEl uso de en
&1
lugar deMath.abs()%2
fue robado de @Neil. ¡Gracias!Gracias a @Shaggy por mostrar que mi solución hacky de 19 bytes no era válida. Si alguien lo quiere:
Depende de cómo maneje el navegador un valor de retorno hacky de0
. Chrome v67, después de 100000 iteraciones de matrices aleatorias nunca lo ordenó mal. Estoy muy seguro de que funciona, y creo que también depende del algoritmo de clasificación específico que Chrome usa. (Puede funcionar en otros navegadores, ese no es el punto)a=>a.sort(a=>++a&1)
fuente
[-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]
en mi consola Chrome 67, la salida[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
Pruébalo en línea
fuente
PowerShell ,
2219 bytesPruébalo en línea!
Toma información a través de salpicaduras, por ejemplo,
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
que en TIO se manifiesta como argumentos separados para cada entrada.Al igual que algunas otras respuestas aquí,
Sort-Object
puede comparar en función de una expresión. Aquí la expresión es!($_%2)
, es decir, las probabilidades se ordenan$false
y los pares se ordenan$true
. Gracias a cómo se comparan los valores booleanos, los valores de falsey se ordenan primero. Esto mueve las probabilidades al comienzo de la salida, y las iguala al final.Sort-Object
es estable, por lo que el orden de los elementos individuales en sus respectivas categorías no cambia (como en el ejemplo de TIO).-3 bytes gracias a mazzy.
fuente
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
. Entonces$args|sort{!($_%2)}
es suficiente. ¿No es así?Ruby , 23 bytes
Pruébalo en línea!
Explicación:
sort_by
ordena cada número como si su valor fuera el resultado del bloque (~i%2
)~x
es equivalente-x-1
y tiene prioridad sobre%2
Los números impares se evaluarán
0
y los pares se evaluarán de1
manera que los números impares se ordenarán primero.Apenas relacionado: esto funciona en ruby de homebrew 2.5.1p57 (porque se basa en un pequeño error) pero solo para enteros no negativos, 20 bytes
Explicación:
Esto usa
sort
que espera un bloque que toma 2 valores y devuelve-1
,0
o1
dependiendo de si el primero es más grande, son iguales o el segundo es más grande.El bloque dado aquí ignora el segundo valor y devuelve
-1
si el primer número es impar o0
par.No se garantiza que funcione, pero lo hace en algunas implementaciones (creo que tiene errores).
fuente
6502 rutina de código de máquina , 47 bytes
Espera un puntero a una matriz de números en
$fb
/$fc
y la longitud de esta matriz en$fd
. Manipula la matriz en su lugar para tener todos los números impares al frente. Este es un código independiente de la posición, por lo que no se necesita una dirección de carga.Como el 6502 es un chip de 8 bits (por lo que las instrucciones solo tratan con valores de 8 bits, opcionalmente firmados), el rango de número válido es
[-128 .. 127]
y el tamaño máximo de la matriz es256
.Desmontaje comentado
Ejemplo de programa ensamblador C64 usando la rutina:
Demostración en línea
Código en sintaxis ca65 :
fuente
Elixir ,
3735 bytesCódigo:
Versión ampliada:
Pruébalo en línea!
fuente
Clojure - 35 bytes
Sin golf:
fuente
#(...)
. También podríasort-by
intentarlo, aunque la presentación ya existe.#()
función anónima pero obtuve un error de arity ya que se pasaron dos parámetros pero solo en el esperado / usado, y%2
al agregarle más caracteres. Estaría interesado en ver cómo se puede hacer esto.