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?oi2J , 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
aapunta a un número impar, se avanza. De lo contrario,aapunta a un número par;bes decrementado yiter_swapeditado cona. (Utilizamos XOR swap, lo que nos ahorra tener que incluir<algorithm>- o<utility>parastd::swap).Hay intercambios innecesarios cuando
bapunta 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
#includedirectiva. 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!=busar unaa-bversión de @ OOBalance .algorithmporregex: 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=filterGuarda un byte.Adjunto , 11 bytes
Pruébalo en línea!
Explicación
Evendevuelvetruepara números pares y defalseotra manera.SortByrangosfalse < 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&1Jalea , 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.0está incluido en la matriz.[1,2,3,4,5,6,6,-1,-2,-3,-4]. JavaScriptarray.sortes 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$aenjoin(' ', $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_shiftidea 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_shiftcuando 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
trueque significa que el número es par yfalseque es impar. Porquetruees más alto quefalselos 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
sortsolo 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-1por impar y1por par.fuente
JavaScript (Chrome v67) -
241923 bytesEl uso de en
&1lugar deMath.abs()%2fue 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 @aque en TIO se manifiesta como argumentos separados para cada entrada.Al igual que algunas otras respuestas aquí,
Sort-Objectpuede comparar en función de una expresión. Aquí la expresión es!($_%2), es decir, las probabilidades se ordenan$falsey 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-Objectes 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_byordena cada número como si su valor fuera el resultado del bloque (~i%2)~xes equivalente-x-1y tiene prioridad sobre%2Los números impares se evaluarán
0y los pares se evaluarán de1manera 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
sortque espera un bloque que toma 2 valores y devuelve-1,0o1dependiendo 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
-1si el primer número es impar o0par.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/$fcy 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-byintentarlo, 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%2al agregarle más caracteres. Estaría interesado en ver cómo se puede hacer esto.