とあるミッション(一日目)。

CheckiOのミッションへの取り組みを記録に残してみたらどうか、と思い立つ。
頭の中だけで考えていることを文章化して、考え方の流れを客観視してみる。解けるかどうか判らないから中途半端に終わるかもしれない企画。

”Unfair Dice”というタイトルのミッションは以下のような感じ。正解すると20ポイント、そこそこ大きい。

画像1

1対1のサイコロ対決。サイコロを各々1回振り、大きい目のほうが勝ち。ただし、目の数を自由に設定した自前のサイコロで勝負する。ただし目の数の合計はお互い揃えるのが条件。そしてミッションは、相手のサイコロに勝てる目のパターンを返すこと。たとえば、[2,2,5,5,5,5] の目のサイコロが提示される。すなわち面の数が6、目の数の合計が2+2+5+5+5+5=24となる、最も勝率の高い目のパターンを返す。ここでの正解は、テストサンプル回答によれば [3,3,3,3,6,6] とのこと。
なお、サイコロは立方体とは限らず(3~10面体)、目の数は1~18の範囲で自由。勝てないと判れば空のリストを返す。

考える上でのヒントが一つ示されていた。A、B、C三つのカスタムサイコロが三つ巴状態になる、つまりBはAより強く、CはBよりも強いが、AはCよりも強い、という関係も起こり得るらしい。強さは相手によって変化し、最強パターンというものは常には存在しないってことか。確かに、あればそれが答になってしまう。ただ、通常のサイコロ [1,2,3,4,5,6] に勝てるカスタムサイコロはない、ともある。へえー不思議だな。

さて、これは一つとして確率の問題だろう。苦手な分野だなー。得意な分野があるわけではないが。
まず、サイコロAとBはどちらが強いかをどうやって検証するのか。AとBを振って出た目の全ての組み合わせにおいての勝敗結果を集計すればいいのかな?
Aのサイコロの目が [a,b,c]、Bのサイコロの目が [A,B,C] の場合の、全ての対戦組み合わせは、
a×A, a×B, a×C, b×A, b×B, b×C, c×A, c×B, c×C
3×3=9対戦で要するに目の数の2乗か。出現頻度は全て同じ。
そんな簡単でいいのかな?

続いて、相手のパターンより強いパターンをどうやって生み出すか。
数学者なら、相手パターンからロジカルに算出するのがスマートと考えるだろうが、僕の脳みそでは無理難題だ。ハナから諦める。
となると、条件に合致する目のパターンをとにかく全部用意し、相手の目と対戦させて勝率の最も高かったパターンを探し出せばそれが答。
という流れで進めることにした。パターン数もマシン負荷を気にするほどの数にはならないからこれが現実的だろう。

普通のサイコロ [1,2,3,4,5,6] に勝てるカスタムサイコロは存在しない。
それはつまり、普通のサイコロは無敵ではあるけれど、個々における最強パターンではない、ということなのだろう。
ふとこれは、資産運用に通ずる話なのではと思った。普通のサイコロはインデックス系商品を貯蓄型で買い続けるようなもの。それに対し、例えば昨今の乱高下している市場に合わせて、ばばーんと効率よく儲ける方法がある。これがカスタムサイコロ。
あるいは「結局 ”普通” には勝てないんだよね」といった人生の教訓のような話にも似ている。いろいろと独創性を発揮しても、なんだかんだで王道が最後まで生き残るんだよな、チッ、みたいな。

などと思考を脱線させながら、コードを考えていく。何とも悠長な話ではあるが。

明日へつづく。

この記事が気に入ったらサポートをしてみませんか?