Antecedentes
Tengo una fila de imanes poderosos y un montón de objetos metálicos entre ellos. ¿Dónde los atraerán los imanes?
Entrada
Su entrada es una matriz de enteros no negativos, que contendrá al menos uno 1. Puedes usar cualquier formato razonable.
Las 0s de la matriz representan espacios vacíos y las 1s representan imanes fijos. Todos los demás números son objetos metálicos, que son arrastrados por los imanes. Cada objeto se tira hacia el imán más cercano (si hay un lazo, el objeto se tira hacia la derecha), y viaja en esa dirección hasta que golpea el imán u otro objeto. Al final, todos los objetos se han agrupado alrededor de los imanes. Se conserva el orden de los objetos.
Salida
Su salida es la matriz donde cada objeto ha sido arrastrado lo más cerca posible del imán más cercano. Debe tener el mismo formato que la entrada.
Ejemplo
Considera la matriz
[0,0,2,0,1,1,0,2,0,3,0,5,0,1,0]
El extremo izquierdo 2se tira hacia el primer par de imanes, al igual que el segundo 2. El 3tiene un imán cuatro pasos en ambas direcciones, por lo que es atraída hacia la derecha. El 5también se tira hacia la derecha, y va entre el 3y el imán. La salida correcta es
[0,0,0,2,1,1,2,0,0,0,0,3,5,1,0]
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
[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]
1es una buena idea!