2012-04-10 16 views
1

私はこの頭の上で頭を掻いています。私は、配列arrと整数nをとり、元の配列の各n番目の要素(インデックス0から始まる)で構成される新しい配列を出力し、終わりのときに必要に応じて先頭に戻る関数を記述しようとしていますが達成された。例えば各n番目の要素を取って並べ替える

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
n = 3 
output = [0, 3, 6, 9, 1, 4, 7, 2, 5, 8] 

または:

arr = [0, 1, 2, 3, 4, 5, 6] 
n = 2 
output = [0, 2, 4, 6, 1, 3, 5] 
+0

どうケースについてARR = [0,1,2,3,4、 5] n = 3?次に、arrのすべての要素を部分的にしかカバーしません。 –

+0

値、またはインデックスでソートしますか? – Phrogz

+0

配列の長さと "n"の値が1より大きい最大の共通分母を持つ場合(すなわち、それらが互いに素でない場合)、何が起こるべきですか?また、これまでに何を試しましたか? – Pointy

答えて

4

これは動作するはずです:

function get_n_elements(arr, n) { 
    if (n === 1) return arr.slice(); 
    var i, j, 
     len = arr.length, 
     ret = []; 
    for (i = 0; i < n; i++) { 
     for (j = i; j < len; j += n) { 
      ret.push(arr[ j ]); 
     } 
    } 
    return ret; 
} 
+0

これは、相対的に重要ではない問題に対する良い解決策です。 'n == 1'のチェックを追加すると良いかもしれません。 – Pointy

+0

よろしくお願いします。追加されました! –

関連する問題