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 0
s de la matriz representan espacios vacíos y las 1
s 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 2
se tira hacia el primer par de imanes, al igual que el segundo 2
. El 3
tiene un imán cuatro pasos en ambas direcciones, por lo que es atraída hacia la derecha. El 5
también se tira hacia la derecha, y va entre el 3
y 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]
1
es una buena idea!Retina ,
9772 bytesSe espera que la entrada sea una lista separada por comas de enteros unarios (los delimitadores iniciales y finales, como el
[...]
trabajo, están bien).Ejecute todos los casos de prueba aquí. (Por conveniencia, esto se encarga de la conversión de y a decimal automáticamente).
Aquí hay una idea completamente diferente que evita los costosos grupos de equilibrio mediante el uso de múltiples etapas. Actualmente tiene 6 bytes más, pero podría ser más fácil de jugar:
fuente
JavaScript (ES6), 108 bytes
Explicación
Itera sobre cada celda y si contiene metal, verifica si la siguiente celda en la dirección del imán más cercano está vacía y, si lo está, la mueve allí. Este proceso se repite muchas veces hasta que todo el metal se haya movido lo más lejos posible.
fuente
PHP, 337 caracteres
Sí, esto es muy largo, porque PHP no es realmente un lenguaje para jugar al golf, pero funciona y me divertí haciéndolo, así que está bien para mí. Por supuesto que estoy abierto a posibles cortocircuitos.
También hay una pequeña característica de
errorque piensa, así que, por ejemplo, aquí:Parece que los 12 se pusieron mágicamente frente a los 3, ¡pero eso no es cierto!
¡El 3 respeta el número más grande y lo deja más cerca del maget!
fuente