Hintergrund
Ich habe eine Reihe mächtiger Magnete und ein paar Metallgegenstände dazwischen. Wohin ziehen die Magnete sie?
Eingang
Ihre Eingabe besteht aus einem Array nicht negativer Ganzzahlen, die mindestens eine enthalten 1. Sie können jedes vernünftige Format verwenden.
Das 0s des Arrays steht für leeren Raum und das 1s für feste Magnete. Alle anderen Zahlen sind Metallgegenstände, die von den Magneten gezogen werden. Jedes Objekt wird in Richtung des nächsten Magneten gezogen (bei einem Gleichstand wird das Objekt nach rechts gezogen) und bewegt sich in diese Richtung, bis es auf den Magneten oder ein anderes Objekt trifft. Am Ende haben sich alle Objekte um die Magnete gruppiert. Die Reihenfolge der Objekte bleibt erhalten.
Ausgabe
Ihr Ausgang ist das Array, in dem jedes Objekt so nah wie möglich an den nächsten Magneten gezogen wurde. Es sollte dasselbe Format wie die Eingabe haben.
Beispiel
Betrachten Sie das Array
[0,0,2,0,1,1,0,2,0,3,0,5,0,1,0]
Das linke 2wird ebenso wie das zweite zum ersten Magnetpaar gezogen 2. Der 3hat einen Magneten, der vier Schritte in beide Richtungen entfernt ist, sodass er nach rechts gezogen wird. Das wird 5auch nach rechts gezogen, und es geht zwischen dem 3und dem Magneten. Die korrekte Ausgabe ist
[0,0,0,2,1,1,2,0,0,0,0,3,5,1,0]
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
[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]
1ist eine gute Idee!