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 0
s des Arrays steht für leeren Raum und das 1
s 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 2
wird ebenso wie das zweite zum ersten Magnetpaar gezogen 2
. Der 3
hat einen Magneten, der vier Schritte in beide Richtungen entfernt ist, sodass er nach rechts gezogen wird. Das wird 5
auch nach rechts gezogen, und es geht zwischen dem 3
und 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]
1
ist eine gute Idee!