mk8dx memo

マリオカート8 デラックス (MK8DX) に関するメモなど

大規模杯集計機を作成しました

大規模杯集計機

マリオカート8デラックス ツール置き場 こちらのページにて公開しています.

使い方

以下ツイート内の動画を参照してください.

あらまし

マリオカート8 デラックスのユーザーコミュニティではしばしば大会が開かれています.
その中で最も規模の大きいものとしてMario Kart Blog上で開催される「大規模杯」があり,トッププレイヤーを含む400人前後もの参加者がしのぎを削っています.

大規模杯では参加者はランダムの12人組に振り分けられ,その組の中の上位者が進出して再びランダムに組分けされ上位者が進出し……という段取りを繰り返します.
この段取りを行う中で欠かせないのが「進行役」であり,レースを行うフレンドルームのホスト役・レース結果の主催への報告を行う必要があります.
レース結果の主催への報告はある程度決まったテキスト構文に則って行われますが,ほぼ全手動で作成するのが慣例となっており,進行役の負荷が大きいように見受けられました.
そこで,リザルトからテキスト構文を楽に生成する手段があれば便利ではないかと考え,作成した次第です.

技術的なメモ

チーム名の切り出し

大規模杯には個人戦形式のみならず,チーム戦形式で行われるものもあります.
マリオカート8 デラックスにはチーム戦機能が公式に実装されていますが,チーム人数設定が固定されていることやアイテム仕様の戦術性の薄さ(同チームに攻撃アイテムが当たらない)から敢えてこの機能は用いられません.
つまり大規模杯ではゲームモードは個人戦のままでチームの合計点を競うこととなります.その際,名前欄に共通文字列を付加することで(例:AA☆Player1,AA☆Player2)同じチームであることを識別します. ここで問題になるのは集計です.チームの合計点を計算する必要がありますが,同チームであることをプレイヤー名からどう認識すればよいのでしょうか.

実はこれは最長共通部分文字列問題と呼ばれる問題に帰着することができ,Switchユーザー名の文字数制限である10文字程度であれな総当たりで容易に解くことができます. 実装は以下のコードが参考になります. github.com

実際の運用では「名前(フレンドコード)」という形式で入力されるため,フレンドコード部分を正規表現にてカットした上で上記アルゴリズムを適用しています.