Réorganisez une liste donnée de sorte que tous les nombres impairs apparaissent avant tous les nombres pairs. Outre cette exigence, la liste de sortie peut être dans n'importe quel ordre.
L'entrée ne contiendra que des entiers, mais ils peuvent être négatifs et il peut y avoir des doublons, et ils peuvent apparaître dans n'importe quel ordre.
La solution la plus courte l'emporte.
Cas de test
[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,]
[]
→ []
Réponses:
05AB1E , 2 octets
Essayez-le en ligne!
la source
Pyth ,
43 octets-1 octet grâce à isaacg
Essayez-le en ligne!
barré 4 est toujours régulier 4
la source
oiI2
.iD2
?oi2
J , 5 octets
Essayez-le en ligne!
\:
trier par ordre décroissant2&|
mod-2la source
R ,
3024 octetsEssayez-le en ligne!
-6 octets grâce à JayCe
la source
C ++,
797664 octetsCette fonction accepte une paire d'itérateurs (qui doivent être des itérateurs à accès aléatoire) et les déplace progressivement l'un vers l'autre. Lorsqu'il
a
pointe vers un nombre impair, il est avancé. Sinon,a
pointe vers un nombre pair;b
est décrémenté etiter_swap
édité aveca
. (Nous utilisons le swap XOR, ce qui nous évite d'avoir à inclure<algorithm>
- ou<utility>
pourstd::swap
).Il y a des échanges inutiles quand on
b
pointe vers un nombre pair, mais nous jouons au golf, pas en réduisant l'efficacité!Démo
Réponse non compétitive
La méthode C ++ naturelle est
std::partition
, mais cela fait 83 octets:la source
#include
directive. Mais mes calculs sont nulles ^^. Vous pouvez remplacer!=
par-
, en économisant 1 octet. J'aime ton approche, c'est intelligent!while(a<b)
si c'est plus pratique que d'a!=b
utiliser unea-b
version @ OOBalance .algorithm
parregex
: codegolf.stackexchange.com/a/150895Japt , 2 octets
Essayez-le en ligne!
la source
Perl 6 , 12 octets
Essayez-le en ligne!
Quel que soit le code qui trie l'entrée par parité, avec des nombres impairs en premier. Vous pouvez supprimer un
%
pour obtenir d'abord des nombres pairs. Notez que «peu importe» est le nom de ce type de fonction anonyme.la source
MATL, 6 octets
Essayez-le sur MATL Online
Alternativement:
Essayez-le sur MATL Online
la source
Python 2 ,
3736 octetsEssayez-le en ligne!
1 octet pointe le chapeau à M. Xcoder .
la source
~
devrait fonctionner au lieu de1-
.Stax , 5 octets
Exécuter et déboguer
Explication:
la source
Haskell ,
2322 octetsEssayez-le en ligne! Cela équivaut à
-1 octet grâce à Lynn
Autres approches:
la source
import Data.Semigroup
?(<>)
fait partie de Prelude . Comme TIO exécute toujours une version plus ancienne, l'importation y est nécessaire. Mais vous avez raison, j'aurais dû le mentionner directement.k odd<>k even;k=filter
enregistre un octet.Attaché , 11 octets
Essayez-le en ligne!
Explication
Even
renvoietrue
pour les nombres pairs etfalse
autrement.SortBy
rangsfalse < true
(par une conversion numérique en0 < 1
), plaçant ainsi les nombres impairs avant les pairs.la source
JavaScript (Node.js) , 29 octets
Essayez-le en ligne! Économisez 4 octets en prenant uniquement en charge les valeurs positives à l'aide de
b%2-a%2
. Si vous écrivez ceci comme:il fonctionnera ensuite sur toutes sortes d'anciennes implémentations JavaScript qui ne sont pas triées de manière stable.
la source
a=>a.sort((a,b)=>b&1-a&1)
marche pas ?b&(1-a)&1
.a=>a.sort(a=>++a&1)
est plus court :)T-SQL, 26 octets
Utilise l'opérateur AND au niveau du bit "&" pour comparer le dernier chiffre avec 1.
EDIT: au niveau du bit PAS puis plus court que l'ajout de 1. EDIT2: réorganiser pour permettre la suppression de l'espace.
la source
ORDER BY~i&1
Gelée , 3 octets
Essayez-le en ligne!
L'un des atomes les plus recherchés semble être un is-even one (ce qui ferait ces 2 octets), sans cela nous devons inverser je crois ...
la source
JavaScript,
2220 octetsa=>a.sort(a=>!(a%2))
Essayez-le en ligne!
la source
a
.0
est inclus dans le tableau.[1,2,3,4,5,6,6,-1,-2,-3,-4]
. JavaScriptarray.sort
est bizarre.PHP , 55 octets
~ 14 mois plus tard et je suis un peu mieux au golf maintenant:
Essayez-le en ligne!
PHP (> = 5,4),
8482 octets(-2 octets, merci à Ismael Miguel )
Pour l'exécuter:
Exemple:
Ou essayez-le en ligne!
la source
$a=array_slice($argv,1);
, utilisezarray_shift($a=&$argv);
, qui économise 1 octet. Supprimez également l'espace avant$a
dansjoin(' ', $a)
, économisant un autre octet. De plus, PHP 5.3 donne des résultats différents. Vous devez spécifier pour quelle version de PHP cette solution est destinée.array_shift
idée et en signalant l'erreur spatiale. Je ne sais pas comment j'ai raté l'espace: DI a également ajouté PHP> = 5.4 dans le titre.array_shift
moment où j'ai essayé et travaillé.Rouge , 42 octets
Essayez-le en ligne!
Si nous devons tenir compte des valeurs négatives:
Rouge , 43 octets
Essayez-le en ligne!
la source
Husk , 4 octets
Essayez-le en ligne!
Explication
la source
Scala , 18 octets
la source
C #, 23 octets
Assez straigt vraiment: cela convertit essentiellement les nombres en booléens, tout en
true
signifiant que le nombre est pair etfalse
qu'il est impair. Parce quetrue
est plus élevé quefalse
les nombres pairs apparaissent en premier.La version formatée ressemble à ça:
Et vous pouvez le tester comme ça:
Ce qui se traduit par ce qui suit:
la source
JavaScript, 23 octets
6 octets plus court que la réponse de @ Neil en utilisant la même langue: D
Explication:
La fonction passée à
sort
ne se soucie que du premier paramètre. S'il est impair, il revient-1
(le résultat de-(n&1)
). Sinon (quand il-(n&1)
cède0
) il revient1
.Essayez-le en ligne!
la source
Python , 35 octets
Essayez-le en ligne!
Trie par la fonction
x -> (-1)**x
, ce qui donne-1
pour impair et1
pour pair.la source
JavaScript (Chrome v67) -
241923 octetsL'utilisation
&1
plutôt queMath.abs()%2
été volée à @Neil. Merci!Merci à @Shaggy d'avoir montré que ma solution hacky de 19 octets n'était pas valide. Si quelqu'un le veut:
Dépend de la façon dont le navigateur gère une valeur de retour hacky de0
. Chrome v67, après 100 000 itérations de tableaux aléatoires, ne l'a jamais mal réglé. Je suis très sûr que cela fonctionne - et cela dépend également de l'algorithme de tri spécifique que Chrome utilise. (Cela pourrait fonctionner dans d'autres navigateurs, ce n'est pas le but)a=>a.sort(a=>++a&1)
la source
[-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]
dans ma console Chrome 67, la sortie[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 octets
Essayez-le en ligne
la source
PowerShell ,
2219 octetsEssayez-le en ligne!
Prend l'entrée par splatting, par exemple,
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
qui sur TIO se manifeste comme des arguments séparés pour chaque entrée.Comme certaines autres réponses ici,
Sort-Object
peut comparer en fonction d'une expression. Ici, l'expression est!($_%2)
, c'est-à-dire que les cotes sont triées$false
et les égales sont triées$true
. Grâce à la comparaison des valeurs booléennes, les valeurs de falsey sont d'abord triées. Cela déplace les probabilités au début de la sortie et les égalités à la fin.Sort-Object
est stable, donc l'ordre des éléments individuels dans leurs catégories respectives ne change pas (comme dans l'exemple TIO).-3 octets grâce à mazzy.
la source
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
. C'est$args|sort{!($_%2)}
assez. N'est-ce pas?Rubis , 23 octets
Essayez-le en ligne!
Explication:
sort_by
trie chaque nombre comme si sa valeur était le résultat du bloc (~i%2
)~x
est équivalent à-x-1
et a priorité sur%2
Les nombres impairs évalueront
0
et les nombres pairs évalueront1
donc les nombres impairs seront triés en premier.À peine lié: cela fonctionne sur ruby de homebrew 2.5.1p57 (car il est basé sur un petit bug) mais uniquement pour les entiers non négatifs, 20 octets
Explication:
Cela utilise
sort
qui attend un bloc qui prend 2 valeurs et renvoie-1
,0
ou1
selon que le premier est plus grand, ils sont égaux ou le second est plus grand.Le bloc donné ici ignore la deuxième valeur et retourne
-1
si le premier nombre est impair ou0
s'il est pair.Il n'est pas garanti de fonctionner, mais il le fait dans certaines implémentations (je pense buggy).
la source
6502 routine de code machine , 47 octets
Attend un pointeur sur un tableau de nombres dans
$fb
/$fc
et la longueur de ce tableau dans$fd
. Manipule le tableau en place pour avoir tous les nombres impairs devant. Il s'agit d'un code indépendant de la position, donc aucune adresse de chargement n'est nécessaire.Comme le 6502 est une puce 8 bits (les instructions ne concernent donc que les valeurs 8 bits, éventuellement signées), la plage de numéros valide est
[-128 .. 127]
la taille maximale du tableau256
.Démontage commenté
Exemple de programme assembleur C64 utilisant la routine:
Démo en ligne
Code dans la syntaxe ca65 :
la source
Elixir ,
3735 octetsCode:
Version étendue:
Essayez-le en ligne!
la source
Clojure - 35 octets
Non golfé:
la source
#(...)
. Vous pouvez égalementsort-by
essayer, bien que la soumission existe déjà.#()
fonction anonyme mais a obtenu une erreur d'arité car deux paramètres ont été passés, mais uniquement sur attendu / utilisé, et%2
en y ajoutant plus de caractères. Serait intéressé de voir comment cela pourrait être fait.