乱数表を作る時に考えること
乱数生成のロジックを考えるのがすごく難しいです。
作ってる本人も、時が経てば忘れてしまうぐらいです。
プログラミングコードの中に日本語で説明を書いたり、いろいろなところに分かりやすい名前をつけたりして整理しているつもりですが、後から見返すとやっぱり理解できません。
基本
休憩の一覧から作ります。
先に休憩の順番だけを決めておくという感じです。
総試合数
4人の場合
4人なら全部で3通りの試合が作れるよね。というのは何となく感覚でわかるかと思います。
1,2 vs 3,4
1,3 vs 2,4
1,4 vs 2,3
サイドもコートも加味されていないのでこの3通りしかありません。
普段の練習試合では大体その場の話し合いやコイントスでサイドもコートも決めると思うので、乱数で作る優先度は低いと思っています。
これが、コートもデュースサイドもアドサイドも全て乱数で決めてしまおうとすると数学的にいう順列の計算になり、4人の場合は24通りの組み合わせが完成します。
プログラムでどうやるかはまた別の話ですが・・・
5人の場合
5人の組み合わせは全部で15通りあります。
先に言うと6人なら45通り, 7人なら105通りです。
計算式もあるのですが、感覚的には常に4人をイメージしてもらえたらいいです。
どういうことか、、最初にも言った通り4人なら3通りしかありません。
5人の組み合わせで休憩が5番なら1234番の人が試合に出ます。
1234の組み合わせは3通りなので、5番が休憩するパターンの試合は3通りしかありません。
同様に4番、3番、2番、1番が休憩の場合もそれぞれ3パターンずつしか試合は作れません。
4番が休憩の場合
- 1,2 vs 3,5
- 1,3 vs 2,5
- 1,5 vs 2,3
以下同様
つまり、5人x3パターンで15通りです。
6人の場合
まずは休憩の人数は2人です。
6人のうち4人がコートに入れるので、残りの2人は休憩です。
次に、6人なら休憩の組み合わせは何通りできるか、についてですが、これは数学的な計算式で組み合わせを使います。
6人の中から2人を選出する組み合わせは何通りあるか?(6C2)
答えは15通りです。
[1,2] [1,3] [1,4] [1,5] [1,6]
[2,3] [2,4] [2,5] [2,6]
[3,4] [3,5] [3,6]
[4,5] [4,6]
[5,6]
[1,2]も[2,1]もどちらも1番と2番が休憩することに変わりはないので、順列ではなく組み合わせです。
あとは5人の時と同じで、どの組み合わせも3パターンずつしか組み合わせはないので、
休憩15パターンx3パターンで45試合です。
7人の場合
休憩は3人です。
7人の中から3人を選ぶ組み合わせは35通りあります。
35通りx3パターンで105試合です。
乱数の作り方
最初に言った通り、休憩の順番だけ先にランダムで決めます。
この時、同じ人が連続して休憩しないように調整します。
(休憩の順番を完全ランダムにするか均等にするかの選択肢を作っていましたが、不要と判断してその選択肢は削除し、全て均一に変更しました。)
次に、休憩で使用されていない数字を使って、各休憩ごとに3パターンの試合を作成します。
これでまずは全通りの試合一覧が完成します。
しかしこの順番のままでは、同じ人が3連続休憩することになるので、さらに各休憩ごとに組み合わせをひとつ抽出して、乱数表を作成していきます。
この時、同じ人が連続して休憩になると乱数表を作り直します。
こんな感じで、実はアプリの画面で乱数の新規作成をすると、裏では乱数表を何度も高速で作り直しています。
まとめ
なんでこんなこと書いたかと言うと、乱数表作るロジックとても難しいよと言うのをまずは伝えたいのと、今後、対応人数を増やしたり、コート数を増やしたりも想定しているので、時間がかかりますよと言うのを伝えたかったですw
そんな試行錯誤の末の乱数表アプリよければ↓
テニス乱数表作成 – Match Maker
Masao Sasaki無料posted withアプリーチ