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!Retina ,
97-72BytesEs wird erwartet, dass es sich bei der Eingabe um eine durch Kommas getrennte Liste von unären Ganzzahlen handelt (führende und nachfolgende Trennzeichen wie
[...]
work sind in Ordnung).Führen Sie hier alle Testfälle aus. (Dies übernimmt der Einfachheit halber die automatische Konvertierung von und nach Dezimalstellen.)
Hier ist eine ganz andere Idee, die die teuren Bilanzkreise durch die Verwendung von mehreren Stufen vermeidet. Es ist derzeit 6 Bytes länger, könnte aber besser zum Golfen sein:
quelle
JavaScript (ES6), 108 Byte
Erläuterung
Durchläuft jede Zelle und überprüft, ob die nächste Zelle in Richtung des nächstgelegenen Magneten leer ist, und verschiebt sie dorthin, wenn dies der Fall ist. Dieser Vorgang wird so oft wiederholt, bis sich das gesamte Metall so weit wie möglich bewegt hat.
quelle
PHP, 337 Zeichen
Ja, das ist sehr lang, weil PHP nicht wirklich eine Sprache zum Golfen ist, aber es funktioniert und ich hatte Spaß daran, es so zu gestalten, dass es für mich in Ordnung ist. Natürlich bin ich offen für mögliche Kurzschlüsse.
Es gibt auch ein kleines
Bug-Feature, das denkt, also zum Beispiel hier:es sieht so aus, als wären die 12 magisch vor die 3 gekommen, aber das stimmt nicht!
Die 3 respektiert die größere Zahl und lässt sie näher an das Maget heranrücken!
quelle