fundo
Eu tenho uma fileira de ímãs poderosos e um monte de objetos de metal entre eles. Onde os ímãs os puxarão?
Entrada
Sua entrada é uma matriz de números inteiros não negativos, que conterá pelo menos um 1
. Você pode usar qualquer formato razoável.
Os 0
s da matriz representam o espaço vazio e os 1
s representam ímãs fixos. Todos os outros números são objetos de metal, que são puxados pelos ímãs. Todo objeto é puxado em direção ao ímã mais próximo (se houver um empate, o objeto é puxado para a direita) e viaja nessa direção até atingir o ímã ou outro objeto. No final, todos os objetos se agruparam ao redor dos ímãs. A ordem dos objetos é preservada.
Saída
Sua saída é a matriz em que todos os objetos foram puxados o mais próximo possível do ímã mais próximo. Ele deve ter o mesmo formato que a entrada.
Exemplo
Considere a matriz
[0,0,2,0,1,1,0,2,0,3,0,5,0,1,0]
A extremidade esquerda 2
é puxada em direção ao primeiro par de ímãs, assim como o segundo 2
. O 3
ímã está a quatro passos nas duas direções, de modo que é puxado para a direita. O 5
também é puxado para a direita e fica entre 3
o ímã e o ímã. A saída correta é
[0,0,0,2,1,1,2,0,0,0,0,3,5,1,0]
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
[0,1,0] -> [0,1,0]
[1,0,2,0,0,1,0] -> [1,2,0,0,0,1,0]
[7,0,5,0,0,1,0] -> [0,0,0,7,5,1,0]
[1,0,3,0,1,0,3,0,1] -> [1,0,0,3,1,0,0,3,1]
[1,0,0,0,0,0,0,7,3] -> [1,7,3,0,0,0,0,0,0]
[1,2,3,4,5,6,7,8,9,10,11,0,0,0,1] -> [1,2,3,4,5,6,7,0,0,0,8,9,10,11,1]
[12,3,0,0,1,0,1,3,0,0,6,12,0,0,0,1] -> [0,0,12,3,1,0,1,3,6,0,0,0,0,0,12,1]
1
é uma boa ideia!