2016-03-27 11 views
1

アイテムを繰り返さずにアレイからn個のユニークペアを生成しようとすると、アレイ内のすべてのアイテムを一度しか使用しないペアが生成されます。アレイからユニークペアのn個のセットを生成する

私はjavascriptで作業しています。 、

arrPlayers = [1,2,3,4,5,6,7,8,9,10] 

matchups-week-1 = [[1,2],[3,4],[5,6],[7,8],[9,10]] 

対戦週2 = [[1,3]:

私が使用していたコードは次のようにアップつまずいます:私は、の配列が、私は次のように生成する必要がある10個の項目が言ってい[2,4]、[5,7]、[6,8]、[ooops !! ]は[9,10]をもう一度行うことができないので、このセットは機能しません。

9,10ペアでコードがコーナーにどのように塗りつぶされているのを確認できますか? 9,10は一意ではないので、4ペアしか生成できません。

これはうまくいくと思いましたが、私は立ち往生しています。この "4つのコーナー"のコーナーに自分自身を塗りつぶしていないコードに関するアイディアですか?

私が使用しているコード。 ...確かに私はストローで握っている。だから私はその質問をしている。

function CreateMatchups(player_ids){ 
    //Create array of PLAYER IDs where checkbox = checked 
    arrPlayers = player_ids.split(", "); 
    arrOpponents = arrPlayers; 
    arrPrevUsed = GetPrevUsedPairs(); 
    var arrUsed = []; 
    var arrTempMatchups = []; 

    var intNumPlayers = arrPlayers.length; 
    var blnOddNumberOfPlayers = isOdd(intNumPlayers); 

    if(blnOddNumberOfPlayers){ 
     arrPlayers.push(9999); //bogus id for placeholder player - fix this 
    } 
    for (var i = 0; i < arrPlayers.length; i++) { 
     player_id = arrPlayers[i]; 
     if(!arrUsed.contains(player_id)){ 
      for (var j = 0; j < arrOpponents.length; j++) { 
       opponent_id = arrOpponents[j]; 
       if((!arrUsed.contains(opponent_id)) && (!arrUsed.contains(player_id)) && (player_id != opponent_id)){ 
        matchup = player_id + "vs" + opponent_id; 
        if(!arrPrevUsed.contains(matchup)) { 
         arrTempMatchups.push(matchup); 
         arrUsed.push(player_id); 
         arrUsed.push(opponent_id); 
        } 
       } 
      } 
     } 
    } 
    return arrTempMatchups; 

    } 
+0

どのように一致するのかわかりません。 これは「奇妙で」「偶数」ですか? – John

+0

あなたが試したことを示すために使用しているコードを投稿することをお勧めします。 – jmugz3

+0

すべてのペアは一意でなければなりません。 [9,10]は、結果全体に一度しか現れません。 – rgalpin

答えて

1

私の質問に対する答えが来ました。用語は:ラウンドロビントーナメントです。だから、私は "JavaScriptのラウンドロビン大会のスケジュールを"グーグルでは、結果の一つはthishttp://www.devenezia.com/javascript/article.php/RoundRobin2.htmlでした。それは、私がプログラムでマッチアップを生成するために必要なものの基礎を与えました。

1

それは、順列と呼ばれています。私は最終的に私は、標準的な用語を使用して行うようにしようとしていたものを参照する方法を発見したとき

function pairwise(list) { 
 
    if (list.length < 2) { return []; } 
 
    var first = list[0], 
 
     rest = list.slice(1), 
 
     pairs = rest.map(function (x) { return [first, x]; }); 
 
    return pairs.concat(pairwise(rest)); 
 
} 
 

 
var result = pairwise(['1','2','3','4','5','6','7','8','9','10']); 
 

 
document.write(JSON.stringify(result));

+0

私はエラーが発生します:オブジェクトは、この行のこのプロパティまたはメソッドをサポートしていません:pairs = rest.map(function(x){return [first、x];}); – rgalpin

+0

ここで実行するとコードスニペットは機能しますか? – John

+0

はい。私はローカルで何かを逃していますかthx – rgalpin

関連する問題