-1

ランクが1から8(またはそれ以上)の任意のサイズ(1から4ラウンド)の配列がある場合、その配列をブラケットスタイルで並べ替えるにはどうすればよいですか?ランク1が最初、ランク2が最後、次にランク次は8、次にランク7は最後から2番目です...

その後、次のラウンド..

1、4、3、2

私はトーナメントブラケットを並べ替えようとしていますが、ランキングの並べ替えに関してはあまりうまくいきません。また、表示が壊れないように適切にスケーリングされます。

編集

いくつかの説明として、各ブラケットのサイズは次のように分類する必要があります。

ブラケットに8つのゲームがある場合、ゲーム番号は1から8であるため、ラウンドは次のように配置する必要があります。

  • ゲーム1
  • ゲーム8
  • ゲーム5
  • ゲーム4
  • ゲーム6
  • ゲーム3
  • 第7戦
  • ゲーム2

したがって、次のラウンドでは、4つのゲームがあり、次のようになります。

  • ゲーム1
  • ゲーム4
  • ゲーム3
  • ゲーム2

等々:

  • ゲーム1
  • ゲーム2

ついに、

  • ゲーム1

また、開始ブラケットのゲーム数が8ゲームではなく16ゲーム、32ゲーム、またはそれ以上の場合にも機能する必要があります。ゲーム1とゲーム8の勝者は、次のラウンドのゲーム1でお互いにプレイするという考え方です。最初のゲームと2番目のゲームは、常に各ブラケットの最初と最後です。それからそれはそれが内向きに機能します。

4

2 に答える 2

1

これはリストをソートしていません。本当にリストを並べ替える必要がない限り、インデックスの方が高速で効率的です。

マッチアップは次のように設定されます(current_rank), (total ranks) - (current_rank) + 1

8段あるので、

1, 8 -1 +1 = 8
2, 8 -2 +1 = 7
3, 8 -3 +1 = 6
4, 8 -4 +1 = 5

したがって、コードは次のようになります

<?php
    $rankscount = count($ranks);
    for ($i = 1; $i <= $rankscount / 2; $i++) {
        echo "matchup will be: rank " . $i . " , rank " . $rankscount - $i + 1;
    }
?>

各ラウンドの後、新しい並べ替えられたリストで関数を再シードすると、1vs4 が得られます。2対3。

私はPHPの専門家ではありませんが、これが役立つことを願っています.

于 2012-09-25T22:17:44.360 に答える
0

次の関数は、 の配列を['r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'r7', 'r8']の順序に並べ替え['r1', 'r8', 'r2', 'r7', 'r3', 'r6', 'r4', 'r5']ます。の配列は次の['r1', 'r2', 'r3', 'r4']ように再配置されます['r1', 'r4', 'r2', 'r3']

function rearranged($array) {
    sort($array);
    $result = array();
    $length = count($array);
    $offset = 0;
    // Handling two elements at once, therefore just do $lenght/2 iterations
    for ($i = 0; $i < $length/2; $i++) {
        // $i + $offset: The current element in the original array 
        // + the offset of fields already filled in the results array
        $result[$i + $offset] = $array[$i];
        // $i + 1 + $offset: The next element in the results array
        $result[$i + 1 + $offset] = $array[$length - $i -1];
            // Increment offset
        $offset++;
    }
    return $result;
}

sort組み込み関数はすべてのキーを互いに比較するため、組み込み関数は使用していません。配列が既に反復処理されており、位置を交換するだけではるかに高速であると想定しています。キーが順序付けされていない場合は、 (値でソート) や(キーでソート)sortなどの組み込み関数を呼び出すことができます。sortksort

また、この関数arraysは要素の数が均等な場合にのみ適切に機能することに注意してください。要素の数が均等でない場合、最後の要素が結果配列から削除されます。

于 2012-09-25T22:18:30.143 に答える