A tarefa é simples: consolidar uma matriz de entradas. A consolidação dessa matriz consiste no seguinte:
- Todas as instâncias de 0 precisam ser movidas para o final da matriz.
- Não deve haver zero entre os números inteiros diferentes de zero.
- Todos os índices diferentes de zero devem manter sua ordem.
Desafio
Consolide uma matriz na menor quantidade de bytes.
Você está consolidando uma matriz de tamanho aleatório com um tamanho até o máximo do seu idioma com números inteiros aleatórios. A entrada pode ser um caminho natural para o seu idioma.
Exemplos
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
Saída
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
Saída
-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 exemplo (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
fonte
fonte
Respostas:
Pitão, 3 bytes
Explicação:
Experimente aqui .
fonte
Q
pode estar implícito no final de qualquer script Pyth (supondo que esteja fora de um lambda, que é esse), gerando 2 bytes.Gelatina, 3 bytes
Classifica a lista pelo NOT lógico de seus valores. Experimente online!
Como funciona
fonte
¬Þ
, até!Oitava, 18 bytes
sort()
leva muitos bytes. Vou usar a indexação lógica.Exemplos de ideona .
fonte
R,
292321 bytesConforme observado por MarcoBreitig, podemos reduzi-lo para 21 bytes se não precisarmos fornecê-lo como uma função:
Versões prévias:
A função recebe um vetor como entrada e ordena pelo vetor lógico resultante da negação da entrada.
Resposta original:
A função pega um vetor como entrada e concatena (
c()
) os valores diferentes de zero e depois os valores zero.fonte
Retina , 15
Substituição simples de regex repetida:
Experimente online.
fonte
ES6, 23 bytes
Costumava ser o caso que
sort
não era estável; nesse caso, você precisava de 41 bytes:fonte
Código de bytes Python (2.7.9), 252 bytes, 33 códigos de operação, 0,0228 segundos
Este foi construído quando a competição ainda era um mais rápido código de concurso
Abre um arquivo no diretório atual chamado
'SourceArray'
para usoO
co_code
(o bit codey real)Ou uma versão do arquivo .pyc
03F3
Você pode tentar compilar meu código fonte usando minha biblioteca no github. Acabei de publicar um commit que permitiu comentários, então espero que ainda esteja competindo no código mais rápido ;)
Aproximadamente equivalente a
fonte
Python, 32 bytes
Leva o argumento como qualquer iterável (lista, tupla, etc.). Obrigado a @xnor por me ensinar um novo truque!
fonte
key=0..__eq__
(sim, dois pontos)."abc".__eq__("abc")==True
. É o que se chama quando você faz"abc"==
. Por razões, inteiros do Python não o possuem, mas os floats, e0. == 0
, como podemos substituir seu operador de igualdade., Que é0..__eq__
..__eq__
método, mas os pontos duplos estavam me confundindo. Eu não entendi que o primeiro era o ponto decimal em um literal de flutuação.Matlab: 21 bytes
Imprime elementos diferentes de zero primeiro e concatena com zero elementos
@(a)____
crie uma função anônima com um argumento de entradaa
[___,___]
concatena vetores horizontalmente entre colchetes, separados por vírgulasa(a~=0)
retorna vetor com todos os elementos diferentes de zero do vetora
a(a==0)
retorna vetor com todos os zero elementos do vetora
fonte
Haskell, 26 bytes
Pegue todos os números diferentes de zero, seguidos por todos os zeros. Filtrando constantes (aqui:
0
) é bastante curta quando se usa uma compreensão da lista:[0|0<-x]
.fonte
Zsh, 22 bytes
(entrada passada como argumentos para o script / função (
$@
também conhecida como$argv
matriz), saída em stdout como lista separada por espaço, nova linha finalizada)<<< string
: aqui-string aqui passada como stdin para o$NULLCMD
comando (cat
por padrão).${@:#0}
$@
exceto elementos sendo 0.${(M)@:#0}
reverso do acimaIsso pressupõe (como várias outras respostas aqui) que os zeros na entrada são todos expressos como
0
(no00
nem0x0
nor36#0
).fonte
Javascript,
525451 bytesfonte
Mathematica, 14 bytes
fonte
Sort[#!=0&]
deve ser suficiente.APL: 8 bytes
a ~ 0 remove zeros de a (leia "a sem 0")
(⍴a) comprimento original de a (leia "forma de a")
↑ preencha a sem zeros no comprimento original de a
Experimente em http://ngn.github.com/apl/web/index.html
Dados do teste: a ← 1 0 1 2 3 4 0 1 0 0 0 0 1 2 3 4 5
fonte
⍴↑{⍵~0}
e isso é ainda mais curto.Java 7, 78 bytes
Não sei por que as outras entradas Java estão usando seqüências de caracteres. Se você deseja filtrar uma matriz inteira, parece melhor usar uma matriz inteira. Isso modifica a entrada no local, mantendo dois índices e preenchendo os demais slots com zeros.
fonte
o
comint c=0,o;for(o:a)...
. Você também pode converter para a sintaxe Java 8 lambda:a->{int c=0;for(int o:a)a[o==0?c:c++]=o;for(;c<a.length;a[c++]=0);}
e afirmar que espera entrada como uma matriz int.Lisp comum, 46 bytes
Classifique a matriz para que, para cada par (a, b) , tenhamos a <b se b for zero. Quando nem a <b ou b <a , a classificação é estável: a ordem original entre os elementos é mantida.
Eu também tentei com ajuste de matriz e remover , mas isso foi muito longo:
fonte
PHP,
73717052494846 bytes - MUITO obrigado a Ismael Miguelfonte
$v==0
pode ser substituído por!$v
, economizando 2 bytes.foreach($argv as$v)$v?$f.=" $v":$b.=" $v";echo$f.$b;
. É .... alguns bytes, eu não sei ...foreach($a as$v)$v?print("$v "):$b.="$v ";echo$b;
de uma maneira mais organizada, parece exatamente o mesmo #Utilitários Bash + GNU, 23
Assume que a entrada é entradas separadas por nova linha em um arquivo chamado
a
. A pontuação inclui +1 para este nome de arquivo.fonte
Perl 5, 26 bytes
23 mais três para
-an
(-E
é grátis)Agradeço ao Dennis por me lembrar
-a
, salvando dois bytes.fonte
CJam, 6 bytes
Uma função anônima. Classifique usando "se um elemento é zero ou não" como chave.
fonte
MATL , 7 bytes
Experimente online!
fonte
Sério, 12 bytes
Experimente online!
Explicação:
fonte
Rápido , 13 bytes
fonte
Perl6, 11 bytes
Produz um bloco - que pode ser chamado em uma matriz:
Embora fosse mais natural (e mais curto) escrever:
Como funciona: se a rotina de classificação perl6 é chamada com um bloco que aceita apenas um argumento, os elementos da lista são classificados de acordo com
by($a) cmp by($b)
. Nesse caso, o bloco é!*
, ou seja, uma negação do operador seja qual for .Eu reparei nisso:
fonte
TeX (formato simples), 160 bytes
Torne o
0
caractere ativo (ou seja, faça o intérprete processá-lo como um comando), depois defina esse comando para ignorar o caractere e incrementar um contador. No final da sequência, imprima quantos zeros forem contados.Salve isso como
zero.tex
e forneça a entrada através da linha de comando com este comando:(Novas linhas adicionadas para maior clareza)
fonte
J, 4 bytes
Explicação:
A função de classificação em J é garantida como estável pela especificação.
Solução alternativa, 6 bytes:
fonte
Palha ,
3029 bytesUse a codificação CP437
Explicação
Experimente online! (O código adicionado é para testar todos os casos de teste)
fonte
JavaScript ES6, 16 bytes
Funciona no firefox
fonte
Ruby , 25 bytes
Experimente online!
fonte
05AB1E ,
1514 bytesCódigo:
Explicação:
Usa a codificação CP-1252. Toma uma matriz como esta:
fonte