Prenez un tableau d'entiers contenant des nombres négatifs, des nombres positifs et des zéros. Regroupez-le avec une seule itération et en place de sorte que tous les nombres négatifs viennent en premier, suivis de tous les zéros, puis de tous les nombres positifs.
Exemple:
Input: 5, 3, 0, -6, 2, 0, 5
Output: -6, 0, 0, 3, 2, 5, 5
Notez que les numéros n'ont pas besoin d'être entièrement triés: juste triés par signe.
Ainsi, le tableau final ressemblera à ceci: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, +
Règles
- Vous ne pouvez utiliser que le tableau d'entrée et une quantité constante de mémoire supplémentaire (c'est-à-dire que vous ne pouvez plus créer de tableaux)
- Vous ne pouvez utiliser qu'une seule boucle, qui peut s'exécuter seulement autant de fois que la longueur du tableau. Vous ne pouvez pas utiliser de fonctions intégrées qui cachent tout type de boucle. Cela inclut des fonctions de tri intégrées.
- Le résultat doit être dans le format que j'ai décrit
Le gagnant sera la personne qui soumettra le code le plus court (compté en octets) qui change le tableau initial dans un format correct (comme décrit ci-dessus).
code-golf
number
sorting
array-manipulation
Ionică Bizău
la source
la source
sort(...)
n'est pas bien car il fait probablement plus d'une itération.Réponses:
C, 92
Cela pourrait probablement être réduit d'au moins 10 octets; il y a beaucoup d'expressions qui vont se perdre.
Le premier argument doit pointer vers le début du tableau; le second doit pointer après la fin du tableau.
Non golfé avec générateur de test aléatoire:
la source
STATA 242
Suit exactement la page wikipedia. Merci @PeterTaylor
Prend l'entrée comme un ensemble de nombres séparés par un espace de std in et les sorties en tant que telles ainsi que std out.
la source
Python 2: 116 octets
Ceci est une traduction Python du golf du pseudo-code du drapeau national néerlandais.
112 octets possibles
Je ne sais pas si cela est autorisé. Il crée un deuxième tableau de taille 3 (quantité constante de mémoire supplémentaire!).
la source
C, 90
Mise en œuvre simple de l'algorithme dans l'article de wikipedia par le commentaire de Peter Taylor sur la question.
S'attend à trouver les données dans un tableau appelé
a
comme l'autre réponse C.n
,p
Etz
sont des pointeurs pour l'insertion des négatifs et des nombres positifs et des zéros.n
etp
sont considérés comme des arguments pointant vers le premier et le dernier élément des données.la source
ECMAScript 157 octets
Prend les nombres séparés par des espaces ou séparés par des virgules dans une boîte de dialogue d'invite et renvoie le résultat avec une boîte de dialogue d'alerte.
la source
PHP (146)
http://3v4l.org/ivRX5
La syntaxe des variables relativement verbeuse de PHP est un peu pénible ici ...
la source
Rebol -
149142140 140Il s'agit d'un port direct du pseudocode wikipedia du drapeau national néerlandais. Voici à quoi il semble non golfé:
Exemple d'utilisation:
NB. Les tableaux Rebol (blocs) n'utilisent pas de virgules -
[5 3 0 -6 2 0 5]
Et si son OK envelopper cela dans une fonction qui prend un tableau et le modifie en place, nous pouvons le réduire à 128 caractères:
En fait, si vous n'avez pas besoin de retourner un tableau (c'est-à-dire de simplement le modifier), vous pouvez raser 1 caractère de plus.
la source
C ++
Solution sans golf: n compte les négatifs ajoutés à l'avant du tableau. Pour chaque élément si échange négatif avec élément en n, si échange nul avec élément en n + 1, sinon échange avec le dernier élément.
la source
CJam -
7267Entrée:
[5 3 4 0 -6 2 0 5]
Sortie:
[-6 0 0 4 2 3 5 5]
Essayez-le sur http://cjam.aditsu.net/
Explication:
Il s'agit d'une autre implémentation de l'algorithme de wikipedia, utilisant
T
pouri
etU
pourj
(tous deux automatiquement initialisés à 0).la source