事の経緯
これはとあるレクリエーションを企画していたときの話なのですが、「1回目のゲームと2回目のゲームのチーム分けで同じチームになる人が出ないようにしてほしい。」という要望がありました。どうしたものかと思ったのですが以下のコードで簡単に解決できました
コード
今回は26チームに6人ずつという程で記載しています
#A-Zまでの配列
team = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U','V','W','X','Y','Z']
#チームメンバー数
NUM_OF_MEMBER=6
for i in range(len(team)):
for j in range(NUM_OF_MEMBER):
print(team[i], end='->')
# 剰余で配列のインデックスが漏れないようにする
print(team[(i+j)%len(team)])
出力結果
A->A
A->B
A->C
A->D
A->E
A->F
B->B
B->C
B->D
B->E
B->F
B->G
C->C
C->D
C->E
C->F
C->G
C->H
解説
基準となるチームに+0~5
することでチームをばらけさせることができます。
i+j
が26を超えてしまった場合でも剰余を使う事でインデックスが漏れるのを防ぐことができます。
おわりに
アルゴリズム、、、と呼ぶにはちょっと陳腐なものですが、プログラミングで解決できる課題は意外と日常に溢れているんだなと思いました。