読者です 読者をやめる 読者になる 読者になる

オフラインリアルタイムどう書くE06オンラインで参加しました

はじめに

2016/8/6開催の「オフラインリアルタイムどう書くE06」、残念ながら所用で行けなかったのですが、オンラインで参加し問題を解きましたので、その解説です。

問題

今回は松島さん作成の目指せホゲモンマスターでした。
※やっぱり最近流行りのアレの影響なんでしょうか?

ホゲモン達を擁するプレイヤー ( トレーナー? ) 同士で総当たり戦を行った時の順位を求める問題です。詳細は上のリンクから問題ページをご覧ください。

なお、同レベルのホゲモン同士で相打ちになるケースがあって、それで最後のホゲモンが同時に戦闘不能になった場合は引き分け、双方勝ち数が加算されません。あくまで順位は引き分けでない勝ち数で考えます。

解説

コードは次の通りです。

割と素直にバトルをシミュレートした感じではないかと思います。

工夫した点という意味では、R,G,Bの相性を mod 3 の演算で単純化しているところでしょうか。両者のR,G,Bの組み合わせは9通りあるのですが、実際はサイクリックな規則性がありますから、0~2の数値にマップして差 ( の mod 3 ) を考えるだけですみます。今回は文字コードを元に、B→0, R→1, G→2 としました。そして、受け手の数値から攻め手の数値を引いて mod 3 で考えると、

  • 0 … B-B,R-R,G-G ダメージ 2
  • 1 … R-B,G-R,B-G ダメージ 4
  • 2 … G-B,R-G,B-R ダメージ 1

と綺麗に分類できます。なおかつ、丁度ダメージは 2 のべき乗で計算できます。( 差の数値をさらに1ずらす )

後は、同レベル同士の対戦では必ず両者がダメージを受けること、そうでない場合は ( レベルの低い方が ) 先にダメージを受けて戦闘不能になると、反撃ができずに次の対戦に移ることに気をつければ十分かと思います。

終わりに

ちょっとコメントを入れていたら ( コメントを入れながら書く習慣はないらしい )、ロスタイムぎりぎりになってしまいましたが、なんとか正解。用事の前にリアルタイムで解けて良かったです。次回はまた会場で参加したいと思います。