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]
fonte
1
é uma boa ideia!Retina ,
9772 bytesEspera-se que a entrada seja uma lista separada por vírgula de números inteiros unários (delimitadores iniciais e finais, como
[...]
funcionam muito bem).Execute todos os casos de teste aqui. (Por conveniência, isso cuida da conversão de e para decimal automaticamente.)
Aqui está uma idéia completamente diferente que evita os caros grupos de balanceamento usando vários estágios. Atualmente, tem 6 bytes a mais, mas pode ser mais fácil de jogar:
fonte
JavaScript (ES6), 108 bytes
Explicação
Itera sobre cada célula e, se ela contém metal, verifica se a próxima célula na direção do ímã mais próximo está vazia e, se estiver, a move para lá. Esse processo é repetido várias vezes até que todo o metal se mova o mais longe que puder.
fonte
PHP, 337 caracteres
Sim, isso é muito longo, porque o PHP não é realmente uma linguagem para o golfe, mas funciona e eu me diverti fazendo com que seja bom para mim. Claro que estou aberto a possíveis falhas.
Também há um pequeno recurso de
bugque pensa, por exemplo, aqui:parece que os 12 ficaram mágicos na frente dos 3, mas isso não é verdade!
O 3 respeita o número maior e permite que ele se aproxime do maget!
fonte