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!Rétine ,
9772 octetsL'entrée devrait être une liste séparée par des virgules d' entiers unaires (les délimiteurs avant et arrière comme le
[...]
travail fonctionnent très bien).Exécutez tous les cas de test ici. (Pour plus de commodité, cela prend automatiquement en charge la conversion de et vers décimale.)
Voici une idée complètement différente qui évite les groupes d'équilibrage coûteux en utilisant plusieurs étapes. Il est actuellement de 6 octets de plus, mais pourrait être plus jouable au golf:
la source
JavaScript (ES6), 108 octets
Explication
Itère sur chaque cellule et si elle contient du métal, vérifie si la cellule suivante en direction de l'aimant le plus proche est vide, et si c'est le cas, la déplace là. Ce processus est répété plusieurs fois jusqu'à ce que tout le métal se soit déplacé aussi loin que possible.
la source
PHP, 337 caractères
Oui, c'est très long, car PHP n'est pas vraiment un langage pour le golf, mais cela fonctionne et je me suis amusé à le faire, donc ça me va. Bien sûr, je suis ouvert à d'éventuelles pénuries.
Il y a aussi une petite fonctionnalité de
boguequi pense, alors par exemple ici:on dirait que les 12 se sont magiquement placés devant les 3, mais ce n'est pas vrai!
Le 3 respecte le plus grand nombre et le laisse se rapprocher du maget!
la source