Ich muss ein einfaches Array auf "seltsame" Weise durchlaufen.
Die Länge meines Arrays ist immer eine ungerade quadratische Zahl.
Nehmen wir an, die Länge ist 49. Um es klarer zu machen, sind meine Elemente der Index des Arrays. Also habe ich etwas wie:
%Vor%Sie können sich die folgende quadratische Matrix vorstellen:
%Vor% Ich muss mit dem Mittelpunkt dieser Matrix beginnen (d. h. myArray[Math.floor(myArray.length / 2)]
)
In meinem Beispiel: 24
Dann muss ich zwischen den linken und rechten Zahlen wechseln, bis ich durch die ganze Reihe gehe.
In meinem Beispiel für die erste Iteration: 17, 31, 10, 38, 3, 45
Sobald eine Zeile fertig ist, wechsle ich zwischen den oberen und unteren Zahlen und wiederhole die Links / Rechts-Logik für die gegebene Zeile.
In meinem Beispiel sollte ich für myArray
als Eingabe eine Schleife in folgender Reihenfolge machen:
Könnten Sie mir helfen, das richtig zu erreichen?
Hier ist, was ich bisher gemacht habe: Ссылка
Ein anderer Ansatz mit einem Array für die Position der Zahlen:
Zahlen, die derjenigen folgen, die Sie verarbeiten (sagen wir 24
), sind immer eine Subtraktion Ihrer Zahl ( 24
) um ein Vielfaches der Länge der Matrix (in Ihrem Beispiel ist diese Länge 7).
Lassen Sie subject
die Nummer sein, die Sie verarbeiten, und hop
die Länge der Matrix.
Durchlaufen Sie also die Zeilen, zwei pro Iteration, und füllen Sie immer zwei Zellen gleichzeitig aus, die erste mit subject - hop * <counter of iteration>
und die zweite Zelle mit subject + hop * <counter of iteration>
Ich hoffe, ich verstehe Ihren Algorithmus, aber das sollte funktionieren:
Wenn die Länge immer ein ungerades Quadrat ist, dann sind Ihre Indexminima 0 und Maxima sind Sqrt (n + 1) -1.
%Vor%Ich denke etwas in den Linien von ...
%Vor%Im Grunde verwendet es die Parität von i und j, um zu bestimmen, ob nach oben oder unten, und nach links oder rechts vom (Mittelpunkt, Mittelpunkt) gehen soll.
Tags und Links javascript arrays