La tarea es simple: consolidar una serie de entradas. La consolidación de esta matriz consta de lo siguiente:
- Todas las instancias de 0 deben moverse al final de la matriz.
- No debería haber ceros entre los enteros distintos de cero.
- Todos los índices distintos de cero deben conservar su orden.
Reto
Consolidar una matriz en la menor cantidad de bytes.
Está consolidando una matriz de longitud aleatoria con un tamaño hasta el máximo de su idioma con enteros aleatorios. La entrada puede ser cualquier forma natural para su idioma.
Ejemplos
Entrada
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
Salida
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
Entrada
-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
Salida
-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
Código de ejemplo (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
fuente
fuente
Respuestas:
Pyth, 3 bytes
Explicación:
Probarlo aquí .
fuente
Q
puede estar implícito al final de cualquier secuencia de comandos Pyth (suponiendo que esté fuera de una lambda, que es), lo que hace que estos 2 bytes.Jalea, 3 bytes
Ordena la lista por el NOT lógico de sus valores. Pruébalo en línea!
Cómo funciona
fuente
¬Þ
incluso 2 bytes !Octava, 18 bytes
sort()
Toma demasiados bytes. Solo usaré la indexación lógica.Ejemplos sobre ideona .
fuente
R,
292321 bytesComo señaló MarcoBreitig, podemos acortarlo a 21 bytes si no necesitamos proporcionarlo como una función:
Versión anterior:
La función toma un vector como entrada y ordena por el vector lógico que resulta de negar la entrada.
Respuesta original:
La función toma un vector como entrada y concatena (
c()
) los valores distintos de cero y luego los valores cero.fuente
Retina , 15
Sustitución simple de expresiones regulares repetidas:
Pruébalo en línea.
fuente
ES6, 23 bytes
Solía ser el caso que
sort
no era estable, en cuyo caso necesitabas 41 bytes:fuente
Código de bytes de Python (2.7.9), 252 bytes, 33 códigos de operación, 0.0228 segundos
Esto fue construido cuando el concurso todavía era un concurso de código más rápido
Abre un archivo en el directorio actual llamado
'SourceArray'
para usoEl
co_code
(El bit de codey real)O una versión de archivo .pyc
03F3
Puede intentar compilar mi código fuente usted mismo usando mi biblioteca en github. Acabo de publicar un compromiso que permitió comentarios, así que espero que todavía compita en lo que respecta al código más rápido ;)
Aproximadamente equivalente a
fuente
Python, 32 bytes
Toma el argumento como cualquier iterable (lista, tupla, etc.). ¡Gracias a @xnor por enseñarme un nuevo truco!
fuente
key=0..__eq__
(sí, dos puntos)."abc".__eq__("abc")==True
. Es lo que se llama cuando lo haces"abc"==
. Por razones, los enteros de Python no lo tienen, pero los flotantes sí, y desde entonces0. == 0
, podemos sustituir su operador de igualdad., Que es0..__eq__
..__eq__
método, pero los puntos dobles me confundían . No entendí que el primero era el punto decimal en un literal flotante.Matlab: 21 bytes
Imprime primero elementos distintos de cero, luego concatena con cero elementos
@(a)____
crear una función anónima con un argumento de entradaa
[___,___]
concatena horizontalmente vectores dentro de corchetes, separados por comasa(a~=0)
devuelve vector con todos los elementos distintos de cero del vectora
a(a==0)
devuelve vector con todos los elementos cero del vectora
fuente
Haskell, 26 bytes
Tome todos los números que no sean cero seguidos de todos los ceros. Filtrado constantes (aquí:
0
) es muy corto cuando se utiliza una lista por comprensión:[0|0<-x]
.fuente
Zsh, 22 bytes
(entrada pasada como argumentos a la secuencia de comandos / función (
$@
también conocida como$argv
matriz), salida en stdout como lista separada por espacios, nueva línea terminada)<<< string
: here-string aquí pasó como stdin al$NULLCMD
comando (cat
por defecto).${@:#0}
$@
excepto que los elementos son 0.${(M)@:#0}
reverso de lo anteriorEso supone (como muchas otras respuestas aquí) que los ceros en la entrada se expresan como
0
(no,00
ni0x0
tampoco36#0
).fuente
Javascript,
525451 bytesfuente
Mathematica, 14 bytes
fuente
Sort[#!=0&]
debería ser suficiente.APL: 8 bytes
a ~ 0 elimina ceros de a (lee "a sin 0")
(⍴a) longitud original de a (lee "forma de a")
↑ rellena a sin ceros a la longitud original de a
Pruébelo en http://ngn.github.com/apl/web/index.html
Datos de prueba: a ← 1 0 1 2 3 4 0 1 0 0 0 0 1 2 3 4 5
fuente
⍴↑{⍵~0}
y eso es aún más corto.Java 7, 78 bytes
No estoy seguro de por qué las otras entradas de Java están usando cadenas. Si desea filtrar una matriz de enteros, parece mejor utilizar una matriz de enteros. Esto modifica la entrada en su lugar manteniendo dos índices y luego simplemente rellenando los espacios restantes con ceros.
fuente
o
conint c=0,o;for(o:a)...
. También puede convertir a Java 8 sintaxis lambda:a->{int c=0;for(int o:a)a[o==0?c:c++]=o;for(;c<a.length;a[c++]=0);}
y afirmar que espera entrada como una matriz int.Lisp común, 46 bytes
Ordene la matriz de manera que para cada pareja (a, b) , tengamos a <b si b es cero. Cuando ni a <b o b <a , la ordenación es estable: se conserva el orden original entre los elementos.
También probé con ajustar-matriz y eliminar , pero esto fue demasiado largo:
fuente
PHP,
73717052494846 bytes - GRANDES gracias a Ismael Miguelfuente
$v==0
se puede reemplazar con!$v
, ahorrándote 2 bytes.foreach($argv as$v)$v?$f.=" $v":$b.=" $v";echo$f.$b;
. Es ... algunos bytes, no sé ...foreach($a as$v)$v?print("$v "):$b.="$v ";echo$b;
para una manera más ordenada, eso se ve exactamente igualBash + GNU utilidades, 23
Asume que la entrada es entradas separadas por nueva línea en un archivo llamado
a
. La puntuación incluye +1 para este nombre de archivo.fuente
Perl 5, 26 bytes
23 más tres para
-an
(-E
es gratis)Gracias a Dennis por recordarme
-a
, guardar dos bytes.fuente
CJam, 6 bytes
Una función anónima. Ordenar utilizando "si un elemento es cero o no" como clave.
fuente
MATL , 7 bytes
Pruébalo en línea!
fuente
En serio, 12 bytes
Pruébalo en línea!
Explicación:
fuente
Rápido , 13 bytes
fuente
Perl6, 11 bytes
Produce un bloque, que se puede invocar en una matriz:
Aunque sería más natural (y más corto) escribir:
Cómo funciona: si la rutina de ordenación perl6 se llama con un bloque que acepta solo un argumento, los elementos de la lista se ordenan según
by($a) cmp by($b)
. En este caso, el bloque es!*
, es decir, una negación del operador que sea .Me doy cuenta de que:
fuente
TeX (formato normal), 160 bytes
Active el
0
carácter (es decir, haga que el intérprete lo procese como un comando), luego defina ese comando para omitir el carácter e incrementar un contador. Al final de la cadena, imprima tantos ceros como se contaron.Guarde esto como
zero.tex
y dé la entrada a través de la línea de comando con este comando:(Se agregaron nuevas líneas para mayor claridad)
fuente
J, 4 bytes
Explicación:
La función de clasificación en J está garantizada como estable por la especificación.
Solución alternativa, 6 bytes:
fuente
Paja ,
3029 bytesUse la codificación CP437
Explicación
Pruébalo en línea! (El código agregado es para probar todos los casos de prueba)
fuente
JavaScript ES6, 16 bytes
Funciona en firefox
fuente
Rubí , 25 bytes
Pruébalo en línea!
fuente
05AB1E ,
1514 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252. Toma una matriz como esta:
fuente