Wie mache ich diese "seltsame" Schleife durch mein Array?

8

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:

%Vor%

Könnten Sie mir helfen, das richtig zu erreichen?

Hier ist, was ich bisher gemacht habe: Ссылка

    
Alex 04.02.2016, 14:00
quelle

8 Antworten

1

Ich glaube ich habe es:

Ссылка

%Vor%     
nachosn89 04.02.2016, 14:41
quelle
3

Ich empfehle, zwei ES6-Generatoren zu verschachteln:

%Vor%

Davon ausgehend könntest du es entweder manuell in ein äquivalentes ES5-Konstrukt zurückübersetzen oder einfach einen Transpiler für dich arbeiten lassen: Demo .

    
Bergi 04.02.2016 17:02
quelle
1

Eine andere Option:

%Vor%     
R.Costa 04.02.2016 14:57
quelle
1

Hier ist ein anderer Ansatz, der verschachtelte Schleifen, ein einzelnes resultierendes Array, verwendet.

JSfiddle-Demo

%Vor%

%Vor%
    
Tushar 04.02.2016 16:25
quelle
1

Ein anderer Ansatz mit einem Array für die Position der Zahlen:

%Vor%
    
Nina Scholz 04.02.2016 17:39
quelle
0

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>

    
Ivan Cézanne 04.02.2016 14:13
quelle
0

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%     
longestwayround 04.02.2016 14:17
quelle
0

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.

    
user967710 04.02.2016 14:25
quelle

Tags und Links