La tâche est simple: consolider un tableau d'ints. La consolidation de ce tableau comprend les éléments suivants:
- Toutes les occurrences de 0 doivent être déplacées vers la fin du tableau.
- Il ne devrait y avoir aucun 0 entre les entiers non nuls.
- Tous les indices non nuls doivent conserver leur ordre.
Défi
Consolidez un tableau en un minimum d'octets.
Vous consolidez un tableau de longueur aléatoire avec une taille pouvant aller jusqu'au maximum de votre langue avec des entiers aléatoires. La saisie peut être une manière naturelle pour votre langue.
Exemples
Contribution
0 5 8 8 3 5 1 6 8 4 0 3 7 5 6 4 4 7 5 6 7 4 4 9 1 0 5 7 9 3 0 2 2 4 3 0 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 0 5 0 6 0 3
Sortie
5 8 8 3 5 1 6 8 4 3 7 5 6 4 4 7 5 6 7 4 4 9 1 5 7 9 3 2 2 4 3 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 5 6 3 0 0 0 0 0 0 0 0
Contribution
-1 -7 -6 5 1 -5 -2 7 -3 -8 0 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 0 -5 -7 3 8 1 1 3 -3 -2 -2 0 -7 0 -4 8 6 -3 6 0 5 3 2 2 2 -2 -7 -3 9 -1 6 0 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 0 3 3 7 -1 -5 1 -3 4 -7 0 3 2 -2 7 -3 0 0 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7
Sortie
-1 -7 -6 5 1 -5 -2 7 -3 -8 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 -5 -7 3 8 1 1 3 -3 -2 -2 -7 -4 8 6 -3 6 5 3 2 2 2 -2 -7 -3 9 -1 6 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 3 3 7 -1 -5 1 -3 4 -7 3 2 -2 7 -3 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7 0 0 0 0 0 0 0 0 0 0
Exemple de code (Java)
public class Consolidate {
public static void main(String[] args) throws Exception {
int[] toConsolidate = new int[args.length];
for (int i=0; i<args.length; i++){
toConsolidate[i]=Integer.parseInt(args[i]);
}
for (int i=0; i<toConsolidate.length; i++) {
for (int k=0; k<toConsolidate.length-1; k++) {
if (toConsolidate[k] == 0){
toConsolidate[k] = toConsolidate[k+1];
toConsolidate[k+1] = 0;
}
}
}
for (int i:toConsolidate)
System.out.print(i+" ");
}
}
code-golf
array-manipulation
Addison Crump
la source
la source
Réponses:
Pyth, 3 octets
Explication:
Essayez ici .
la source
Q
peut être implicite à la fin de n’importe quel script Pyth (en supposant que ce soit en dehors d’un lambda, ce qui est le cas), ce qui donne 2 octets.Gelée, 3 octets
Trie la liste par le NON logique de ses valeurs. Essayez-le en ligne!
Comment ça marche
la source
¬Þ
, même!Octave, 18 octets
sort()
prend trop d'octets. Je vais juste utiliser l'indexation logique.Exemples sur ideone .
la source
R,
292321 octetsComme l'a noté MarcoBreitig, nous pouvons le réduire à 21 octets si nous n'avons pas besoin de le fournir en tant que fonction:
Versions précédentes:
La fonction prend un vecteur en entrée et ordonne par le vecteur logique résultant de la négation de l'entrée.
Réponse originale:
La fonction prend un vecteur en entrée et concatène (
c()
) les valeurs non nulles puis les valeurs nulles.la source
Rétine , 15
Substitution de regex répétée simple:
Essayez-le en ligne.
la source
ES6, 23 octets
Auparavant, le cas
sort
n'était pas stable, auquel cas vous aviez besoin de 41 octets:la source
Code d'octet Python (2.7.9), 252 octets, 33 codes d'opération, 0.0228 secondes
C'était construit quand le concours était encore un concours de code le plus rapide
Ouvre un fichier dans le répertoire actuel appelé
'SourceArray'
pour utilisationLe
co_code
(le bit de code réel)Ou une version de fichier .pyc
03F3
Vous pouvez essayer de compiler mon code source vous-même en utilisant ma bibliothèque sur github. Je viens de poster un engagement qui permettait les commentaires donc j'espère que cela reste en compétition en ce qui concerne le code le plus rapide ;)
À peu près équivalent à
la source
Python, 32 octets
Prend l'argument comme quelconque (liste, tuple, etc.). Merci à @xnor de m'avoir appris un nouveau tour!
la source
key=0..__eq__
(oui, deux points)."abc".__eq__("abc")==True
. C'est ce qu'on appelle quand vous le faites"abc"==
. Pour des raisons, les entiers Python ne l'ont pas, mais les flottants, et depuis0. == 0
, nous pouvons lui substituer son opérateur d'égalité, qui est0..__eq__
..__eq__
méthode, mais les points doubles me déroutaient . Je n'ai pas compris que le premier était le point décimal d'un littéral flottant.Matlab: 21 octets
Affiche d'abord les éléments non nuls, puis les concatène avec zéro
@(a)____
créer une fonction anonyme avec un argument d'entréea
[___,___]
concatène horizontalement les vecteurs entre crochets, séparés par des virgulesa(a~=0)
renvoie le vecteur avec tous les éléments non nuls du vecteura
a(a==0)
renvoie le vecteur avec tous les éléments nuls du vecteura
la source
Haskell, 26 octets
Prenez tous les nombres non nuls suivis de tous les zéros. Filtrage des constantes (ici:
0
) est assez courte lors de l' utilisation d' une compréhension de la liste:[0|0<-x]
.la source
Zsh, 22 octets
(entrée transmise en tant qu'arguments au script / fonction (également
$@
appelée$argv
tableau), sortie sur stdout sous forme de liste séparée par des espaces, nouvelle ligne terminée)<<< string
: here-string ici passée en tant que stdin à la$NULLCMD
commande (cat
par défaut).${@:#0}
$@
sauf les éléments étant 0.${(M)@:#0}
l'inverse de ce qui précèdeCela suppose (comme plusieurs autres réponses ici) que les zéros dans l’entrée sont tous exprimés par
0
(no00
ni0x0
ni36#0
).la source
Javascript,
525451 octetsla source
Mathematica, 14 octets
la source
Sort[#!=0&]
devrait suffire.APL: 8 octets
a ~ 0 supprimer les zéros de (lire "a sans 0")
(a) longueur d'origine de a (lire "forme d'un")
↑ pavé a sans zéros à la longueur d'origine de a
Essayez-le sur http://ngn.github.com/apl/web/index.html
Données de test: a ← 1 0 1 2 3 4 0 1 0 0 0 0 1 2 3 4 5
la source
⍴↑{⍵~0}
et c'est encore plus court.Java 7, 78 octets
Je ne suis pas sûr de savoir pourquoi les autres entrées Java utilisent des chaînes. Si vous souhaitez filtrer un tableau entier, il semble préférable d'utiliser un tableau entier. Cela modifie l'entrée en place en conservant deux index, puis en remplissant simplement les emplacements restants avec des zéros.
la source
o
avecint c=0,o;for(o:a)...
. Vous pouvez également convertir la syntaxe lambda en Java 8:a->{int c=0;for(int o:a)a[o==0?c:c++]=o;for(;c<a.length;a[c++]=0);}
et indiquer qu'elle attend une entrée sous la forme d'un tableau int.Common Lisp, 46 octets
Triez le tableau de sorte que pour chaque couple (a, b) , nous avons un <b si b vaut zéro. Lorsque ni a <b ni b <a , le tri est stable: l'ordre d'origine entre les éléments est conservé.
J'ai aussi essayé avec adjust-array et remove , mais c'était trop long:
la source
PHP,
73717052494846 octets - GRAND merci à Ismael Miguella source
$v==0
peut être remplacé par!$v
, en vous épargnant 2 octets.foreach($argv as$v)$v?$f.=" $v":$b.=" $v";echo$f.$b;
. C'est .... quelques octets, je ne sais pas ...foreach($a as$v)$v?print("$v "):$b.="$v ";echo$b;
pour une façon plus soignée, cela a l'air exactement le mêmeUtilitaires Bash + GNU, 23
Suppose que l'entrée est des entrées séparées par une nouvelle ligne dans un fichier appelé
a
. Le score inclut +1 pour ce nom de fichier.la source
Perl 5, 26 octets
23 plus trois pour
-an
(-E
c'est gratuit)Merci à Dennis de me l'avoir rappelé
-a
, économisant deux octets.la source
CJam, 6 octets
Une fonction anonyme. Triez en utilisant «si un élément est nul ou non» comme clé.
la source
MATL , 7 octets
Essayez-le en ligne!
la source
Sérieusement, 12 octets
Essayez-le en ligne!
Explication:
la source
Rapide , 13 octets
la source
Perl6, 11 octets
Produit un bloc - qui peut être appelé sur un tableau:
Bien qu'il serait plus naturel (et plus court) d'écrire:
Comment ça marche: si la routine de tri perl6 est appelée avec un bloc n'acceptant qu'un seul argument, les éléments de la liste sont triés selon
by($a) cmp by($b)
. Dans ce cas, le bloc est!*
, c'est-à-dire une négation de l' opérateur quelconque .Je remarque que:
la source
TeX (format simple), 160 octets
Activez le
0
caractère (c’est-à-dire faites en sorte que l’interprète le traite comme une commande), puis définissez cette commande pour ignorer le caractère et incrémenter un compteur. À la fin de la chaîne, imprimez autant de zéros que comptés.Enregistrez ceci sous
zero.tex
et donnez l'entrée via la ligne de commande avec cette commande:(Newlines ajouté pour plus de clarté)
la source
J, 4 octets
Explication:
La fonction de tri dans J est garantie par la spécification.
Solution alternative, 6 octets:
la source
Paille ,
3029 octetsUtilisez le codage CP437
Explication
Essayez-le en ligne! (Le code ajouté est de tester tous les cas de test)
la source
JavaScript ES6, 16 octets
Fonctionne sur firefox
la source
Ruby , 25 octets
Essayez-le en ligne!
la source
05AB1E ,
1514 octetsCode:
Explication:
Utilise le codage CP-1252. Prend un tableau comme ceci:
la source