5 返信 最新の回答 日時: May 10, 2015 6:01 PM ユーザー:air-k

    テニスの乱数表を作りたいのですが・・・

    air-k

      タイトル

      テニスの乱数表を作りたいのですが・・・

      フォーラムに投稿

      テニスの乱数表を作りたいのです。

      テニスの乱数表とは、例えば参加者が12名(Aさん〜Lさん)いるとします。

      ダブルスの試合を組む場合

      第1試合は(Aさん・Bさんペア)対(Cさん・Dさんペア)

      第2試合は(Eさん・Fさんペア)対(Gさん・Hさんペア)

      第3試合は(Iさん・Jさんペア)対(Kさん・Lさんペア)

      第4試合は(Aさん・Eさんペア)対(Cさん・Gさんペア)

      第5試合は〜

      という具合に出来るだけ待ち時間を均等にし、同じペアや対戦にならないように工夫した表がテニス乱数表です。

      テニスコートの面数と参加者の人数によって乱数表はそれぞれ必要になります。

      下の表は2面で10人の場合の乱数表です(1番さん〜10番さん)

      最初にじゃんけんで番号決めをしてこの乱数表に則って試合をします。

      ところが自分の番号を忘れてしまう方が結構います。

      そこでファイルメーカーで番号ではなく名前で記載可能な、しかも面数と人数を入力すればそれに即した乱数表が作成されるようなものを作り、ファイルメーカーGOでモバイル化してコートに持ち込みたいと考えました。

      が作成方法が思いつきません。

      ファイルメーカーでは無理なのではとあきらめかけています。

      関数Randomではコート1とコート2に同じ人が出て来てしまいあきらめました。

      乱数表をあらかじめ作っておいて面数と人数によって参照させる表を変える方法が楽ではないかと考えたのですが、excelではないので表はどう作っていいものやら・・・

      どなたか作成のヒントをいただけないでしょうか?

      よろしくお願いします。

       

       

       

        • 1. Re: テニスの乱数表を作りたいのですが・・・
          p388cell

          以下のようなカスタム関数 RandomValues ( text ) を作成して、プレーヤー一覧をランダム化してはいかがでしょうか?

           

           

           

          Let ( [
                  t = text ;
                  c = ValueCount ( t ) ;
                  r = Floor ( Random * c ) + 1 ;
                  x = LeftValues ( t ; r - 1 ) & MiddleValues ( t ; r + 1 ; c - r )
              ] ;
              GetValue ( t ; r ) &
              Case ( not IsEmpty ( x ) ; ¶ & RandomValues ( x ) )
          )

           

          順番がランダムになったリストが得られますので、前から1〜4人目は1面で対戦、5〜8人目は2面で対戦と利用できると思います。

          コート1と2に同じ人が出る事はなくなると思います。

          ただ、ランダムなので、ある人はずっと休みなし、、、のような事もあり得ますね...

          先に休みの人をランダムで決めておくのが無難でしょうか^^;

           

          • 2. Re: テニスの乱数表を作りたいのですが・・・
            sago350@未来Switch

            妄想レベルですが。
            参加者マスタを用意して、、、下記関数で適当なフィールドで全置換します。

            Random

            そうすると、ランダムな数が入りますので、ソートして上から二人取ると最初のペアに。
            次のペアは最初のペアを対象外にしてRandom関数で前置換&ソート。
            上から二人を取ると対戦ペア。

            ----ここまでで第一試合の組み合わせ決定。

            次は休みだったペアを優先して1面か2面に同じ要領で配当。
            残りを同じように配当する時には配当済みのペアを対象レコードから外しておきます。(ここでは休みのペア)

            と、していくと出来るんじゃないかなーと思います。
            ポイントは
            ・Random関数での全置換
            ・ソート
            ・対象レコードの制御
            を上手いこと使う。
            参加者マスタに何回試合したかをカウントする様にしておいて上手いことしたら均等に出来るかも。

            • 3. Re: テニスの乱数表を作りたいのですが・・・
              air-k

              回答ありがとうございます。

              何となくヒントになりました。

              時間がかかりそうですががんばってやってみようと思います。

              ありがとうございました。

              • 4. Re: テニスの乱数表を作りたいのですが・・・
                Shin

                テニス乱数表、という物がいくつか公表されていますね。

                これを規定値として取り込んでおき、参加選手名に乱数でプレイヤー番号を与え、既定の乱数表を置き換える、という方法が簡便化と思います。

                乱数で表を作ると、それが思い通りになっているかとか、休息数が一定かなどを検証していく必要が有り、却って難しくなります。

                • 5. Re: テニスの乱数表を作りたいのですが・・・
                  air-k

                  Shinさん、コメントありがとうございます。

                  規定値はデフォルトデータの自動入力を行うものですよね。

                  そんな使い方が出来るんですね。なるほど〜。

                  それ、いいですね。なんとなく目の前が開けた感があります。

                  いつもありがとうございます。

                  さっそくやってみます。