どうも、マスクド・ニシオカです。
タイトルだけではわかりづらいので、問題の詳しい内容を書きます。
なお、なぜこの問題に取り組む必要になったか?は後述すること、さらに自分なりに答えが出ていることを、先にお伝えしておきます。
問題
11人参加のリーグ戦(総当たり戦)を行うに当たり、その組み合わせを考える
ただし、同一人物が1日2試合してはいけません。
例えば、11人参加のテニス大会があったとして、それぞれの選手が1日1試合(もしくは試合が無い日があってもよい)とした場合、何試合を何日で、どういった組み合わせなら1日1試合以下を守れるか?という問題です。
きっと頭のいい人なら「ふ~ん」という間にに答えが出そうな気がしますが、数学どころか算数すら苦手な自分には、頭で考えることができず半日以上紙に書いてエクセルの表を使ってウンウン唸ってやっと答えが出ました。
ただ、その回答で合ってはいるのですが、こんな非効率な方法じゃなく、もっと簡単に答えが出ないものか?そしてそれをプログラム的な何かでできないものか?という考えに至りました。
そこで記事にして何かしらヒントを得られればという、超他力本願な内容でございます。
あっ!読むのをやめないで~!
もうちょっとお付き合いくださいぃぃぃ!
この問題を解かなければならない理由
何度かこのブログでは触れていますが、YouTubeにてファイアープロレスワールドというプロレスゲームの動画を公開しています。
そこで11人レスラーが参加するリーグ戦を企画したのですが、できるだけ本物と同じようにしようとすると、レスラーが平均的に試合をする日程を組む必要がありました。
これが個人の遊びであれば(個人のお遊びなのですが・・・)、同じレスラがー1日に何試合しても何の問題もないのですが、変なこだわりでリアル感を持たせようとすると、どうしてもキレイな組み合わせを作りたくなりました。
で、最初は簡単にできるだろうとやってみたのですが、実際にやり始めると「アレ?」の連続で頭を抱えました。
最終的には力技で答えを出して納得のいく日程を組めたのですが、次回も同じやり方をするとなると、あまりにも非効率で・・・
スポンサーリンク
答えを出すまでにやったこと
まず、全体の試合数の出し方は何となくわかりました。
全試合数の計算式は、参加人数×(参加人数-1)÷2のはずです。
つまりこの場合、11×(11-1)÷2=55で、全部で55試合となります。
で、11人ですから1日に2試合しないという原則から、1日の最大試合数は5試合までとなりますので、1日5試合で11日間の日程となりました。
次に11人をA~Kに見立てて、紙とペンで組み合わせを考えました。
1日目 ①A-B②C-D③E-F④G-H⑤I-J Kなし
2日目 ①K-A②B-D③E-G④F-H⑤G-J Cなし
こんな感じで最初はいいのですが、後になると同じ組み合わせになったり同じのが2回出てきたりぐちゃぐちゃになってしまい、結局「適当ではダメだ!」ということになりました。
そこでエクセルの表を使って考えてみました。
こういう表があって・・・
この赤いところは同じ組み合わせになるから不要となります。
ということは、こうなるはずです。
ABからJKまでで55個あるから、これを5日間に分ければ良いのでは?となりました。
つまり、この55個を
下記の表にパズルのようにはめていけば答えが出ると考えたのです。
ところが、これも最初はいいのですが最後になると、同じ記号(レスラー)が同じ日に重複してパズルが完成せず、この方法もダメでした。(もちろん何度か挑戦しましたが、あまりにも非効率で、これは間違っていると判断しました)
スポンサーリンク
しばらく途方にくれたのですが、今度は別のアイデアを思いつきます。
上手く言葉にできないので、図で見てもらうとこんな感じです。
この縦に並んだ同じ色の組み合わせをずらして行けば、いけるんじゃないか?となり
こんな表(上図)ができました。これを縦に見ると同じ記号が無いので、これが解決の糸口となりました。
で、これを眺めていると1日の試合数である、5の組み合わせがすでに出来ていることに気が付きました。
ということは、これをベースにパズルを組めばいけるのでは?となりました。
こうやって移動させて
こうなるので、これを繰り返していくと
こういうのができて
パズルをキレイに完成させて
日程などを加えると、これでOK!
細かいことをいえば試合順が気になりますが、それは何とでもできるので完成とする!
わーい!やったー!
でも、違ーう!
ちゃんとした大人はこんなやり方をしていないはず!
こんな子どもみたいなやり方しないはず!
だいたい、なぜ完成したかわからないし・・・トホホ
なので誰か賢い人!
リーグ戦の参加人数と開催日数を入力すれば、パッと組み合わせが出るやり方かソフトを教えてくださーい!
スポンサーリンク
最後に
最後までお読み頂きありがとうございます。
読んでおわかりだと思いますが、決して「オレはこの問題が解けたぜ!」という自慢ではなく、「大の大人が何をやっているんだか・・・」という嘆きでございます。
ただ問題が解けなくてググってみたのですが、しっくりくる記事を見つけることができず、それなら恥ずかしいことは重々承知の上で記事にしてみようかと思った次第でございます。
最初に書きましたとおり、計算に強い方であればここで長々と説明してきたことを、「あ~これは〇〇の法則ですね」みたいにサラっと説明できるのでしょうが、残念な頭を持つ自分にはこうやって説明するのが精一杯でした。
もし良ければサラっと説明できる方の解説を読んでみたいのですが・・・
これを読んで下さっているアナタ、いかがですか?
でわ、股!!
クリックしてもらえると助かります。