このプログラムは、麻雀大会の対戦組み合わせを自動的に生成するためのものです。プログラムは、指定された参加者数とゲーム数に基づいて各プレイヤーの対戦組み合わせを決定し、最終的な対戦表を出力します。各ゲームごとにプレイヤーが異なる組み合わせで対戦するように配慮されています。
member
) とゲーム数 (game_count
) を設定します。import random
import os
import time
import pandas as pd
member
、game_count
、team_mem
などの設定を行います。players = list(range(1, member + 1))
team_a = players[:team_mem]
team_b = players[team_mem:team_mem*2]
team_c = players[team_mem*2:team_mem*3]
team_d = players[team_mem*3:]
def generate_match(team1, team2, team3, team4, match_history):
# 対戦組み合わせを生成するための関数
# 各チームから1人ずつプレイヤーを選びますが、過去に対戦したことのあるプレイヤーは除外します
while True:
# 対戦履歴とリトライカウントをリセット
# 各ゲームの対戦組み合わせを生成
# リトライ回数が一定数を超えた場合はやり直し
# ピボット解除して再ピボットするためのデータフレームを作成
columns = ['Game', 'Table', 'Player']
df = pd.DataFrame(game_records, columns=columns)
# 各プレイヤーの各ゲームごとのテーブルを追跡
player_tables = {}
for game, table, player in game_records:
if player not in player_tables:
player_tables[player] = {}
player_tables[player][f'Game{game}'] = table
# 再ピボット
df_pivot = pd.DataFrame.from_dict(player_tables, orient='index').fillna('')
# プレイヤーを昇順にソート
df_pivot = df_pivot.sort_index()
# 表示
print(df_pivot)
# 実行時間を計算し、表示
elapsed_time = end_time - start_time
hours, rem = divmod(elapsed_time, 3600)
minutes, seconds = divmod(rem, 60)
print(f"実行時間: {int(hours)}時間{int(minutes):02d}分{seconds:02.0f}秒")
member
は4の倍数で設定してください。そうしないと、チーム分けが均等に行われません。このプログラムを使用することで、麻雀大会の対戦組み合わせを自動的に生成し、公平で効率的な大会運営が可能になります。