2

一連の数字の特定の繰り返し位置を計算するための数式を決定する必要があります。数字のリストは無限に繰り返され、このリストのn個ごとに数字を見つける必要があります。したがって、 yの繰り返し番号のリストで*n * 番目の項目を見つけたいと考えています。

たとえば、私のリストが 7 桁 (y=7) で、5 番目の項目 (n=5) ごとに必要な場合、その項目を見つけるにはどうすればよいですか? リストは次のようになります (見やすいように 5 つにグループ化しました)。

12345 67123 45671 23456 71234 56712 34567

最初のグループ番号 5、次に 2 番目のグループ番号 3、3 番目のグループの 1、6、4、2、7 を見つける必要があります。

これは、 yおよびnの任意の数に対して機能する必要があります。私は通常*n * 番目の項目を見つけるためにモジュラスを使用しますが、それはリストの数が増え続け、リセットされない場合のみです。

ブラウザベースの問題であるため、JavascriptまたはJQueryでこれを実行しようとしていますが、数学があまり得意ではないため、解決に苦労しています。

ありがとう!


編集:理想的にはこれに対する数学的解決策を探していますが、問題についてもう少し説明しますが、混乱を招くだけかもしれません。カルーセル配置のアイテムのリストがあります。私の例では 7 つの一意の項目があります (任意の数である可能性があります) が、実際のリストは実際にはその 5 倍のサイズ (上記の 5 つのグループとは関係ありません) であり、作成した 4 つの重複セットがあります。

無限にスクロールしているように見せるために、リストの位置は「最後の」ページでリセットされます (この例では、項目 1 ~ 7 が 5 項目幅のビューポートにまたがるため、2 つのページがあります)。上記のグループは、私の例ではページごとに 5 つのアイテムがあるため、ページを表しています。重複は、アイテムの次のページに移動するときに発生する可能性のある空白を埋めるために必要なパディングを提供します (たとえば、ページ 2 は 6 と 7 で始まりますが、重複した 1、2 と 7 がない場合は空になります)。 3)。ページが最後のページを通過すると (つまり、3 ページに移動しようとすると)、それらをリスト内のさらに後ろのページ 1 に再配置します。

これが、私が配列インデックスを使用できない理由であり、数学的な解決策があると便利な理由です。私が達成しようとしているものと同様のタスクを実行するカルーセルがそこにあることに気付きましたが、私が持っているものを使用する必要があります!

4

6 に答える 6

3

次のように、5 文字ごとにループするだけです。

var data = "12345671234567123456712345671234567";
var results = [];

for(var i = 4; i < data.length; i += 5){
    results.push(data[i]);
}

//results = [5, 3, 1, 6, 4, 2, 7]

変数を使用する場合x = 5;、for ループは次のようになります。

for(var i = x - 1; i < data.length; i += x){...

知る必要はないy

于 2013-04-30T14:37:19.380 に答える
0
function get(x, A, B) {
  var r = (x * A) % B;
  return r ? r : B;
}

var A = 5;
var B = 7;
var C = [];

for (var x = 1; x <= B; ++x) {
    C.push(get(x, A, B));
}

console.log(C);

結果: [5, 3, 1, 6, 4, 2, 7]

http://jsfiddle.net/xRFTD/

于 2013-04-30T20:49:01.027 に答える
0

あなたの編集の後、私は別の解決策を作ります;)

var n = 5, y = 7;


for (var i = 1; i<=y; i++) {
    var offset = ( i*y - (i-1)*n ) % y;
    var result = 0; 
    if (offset === n) {
        result = y;
    } else {
        result =  (n - offset) > 0 ? n - offset : offset;
    }
    console.log(result);
}

[5, 3, 1, 6, 4, 2, 7] が出力されます。

JSFIDDLE: http://jsfiddle.net/mcrLQ/4/

于 2013-04-30T18:46:11.027 に答える
-1
var data = "12345 67123 45671 23456 71234 56712 34567";
var x = 5;
var y = 7;
var results = [];
var i = x - 1; // enumeration in string starts from zero

while ( i <= data.length){
    results.push(data[i]);
    i = i + x + 1;// +1 for spaces ignoring 
}
于 2013-04-30T14:39:08.990 に答える