Contexte
J'ai une rangée d'aimants puissants et un tas d'objets métalliques entre eux. Où les aimants les tireront-ils?
Contribution
Votre entrée est un tableau d'entiers non négatifs, qui en contiendra au moins un 1
. Vous pouvez utiliser n'importe quel format raisonnable.
Les 0
s du tableau représentent des espaces vides et les 1
s des aimants fixes. Tous les autres nombres sont des objets métalliques tirés par les aimants. Chaque objet est tiré vers l'aimant le plus proche (s'il y a une cravate, l'objet est tiré vers la droite), et il se déplace dans cette direction jusqu'à ce qu'il touche l'aimant ou un autre objet. Au final, tous les objets se sont regroupés autour des aimants. L'ordre des objets est préservé.
Production
Votre sortie est le tableau où chaque objet a été tiré le plus près possible de l'aimant le plus proche. Il doit avoir le même format que l'entrée.
Exemple
Considérez le tableau
[0,0,2,0,1,1,0,2,0,3,0,5,0,1,0]
Le plus à gauche 2
est tiré vers la première paire d'aimants, tout comme le second 2
. Le 3
a un aimant à quatre pas dans les deux sens, il est donc tiré vers la droite. Le est 5
également tiré vers la droite et se place entre 3
l'aimant et l'aimant. La sortie correcte est
[0,0,0,2,1,1,2,0,0,0,0,3,5,1,0]
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
[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
est une bonne idée!