モノポリーでどのマスに止まりやすいかという問題でした。
考えないといけないルールを明確にしておきましょう。
①2個サイコロを振って、足した目の数だけ進む。
②Chance、Communityに止まったときは、カードを引いて指示に従う
③ゾロ目が出たら進んだ場所の指示に従った上で、もう一度サイコロを振る(指示に従うルールは書かれていない)
④1ターン中にゾロ目が3回出たら、Jailに強制移動する
⑤ゾロ目中にJailに止まった場合は、そこで終わりとし、次の人にターンが移る(このルールは書かれていない)
板上のマス目で、Goを0とし、時計回りに順に1,2と番号を振っておきます。
なお、使っている言語はPythonです。
Chanceカード、Communityカードは最初にシャッフルし、1枚引いたらそのカードを一番下に入れることになっているので。
random関数の力を借りて、
cc = random.sample([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
ch = random.sample([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
のようなリストを作っておくと良さそうです。
posが止まった場所として、
{0:0, 1:10, 2:11, 3:24, 4:39, 5:5,
6:{7:15, 22:25, 36:5}[pos], 7:{7:15, 22:25, 36:5}[pos],
8:{7:12, 22:28, 36:12}[pos], 9:{7:4, 22:19, 36:33}[pos],
10:pos, 11:pos, 12:pos, 13:pos, 14:pos, 15:pos}[ch[i]]
がchanceカードの指示ということになります。
Communityカードの指示は
{0:0, 1:10, 2:p, 3:p, 4:p, 5:p, 6:p, 7:p, 8:p, 9:p, 10:p, 11:p, 12:p, 13:p, 14:p, 15:p}[cc[i]]
です。
posが {7,22,36}のどれかになったら、Chanceカードの指示、
posが{2,17,33}のどれかになったら、Communityカードの指示、
posが{30}だったら、Jailに移動です。
サイコロはランダムに出現させ、1,000,000ターン処理してみます。
あとはゾロ目の処理を正しく処理すれば、答えにたどり着きそうです。
問題では、4面サイコロを使うとどうなるかということでした。書かれていない条件が有るなしにかかわらず、答えは出るようなのですが、
実際に使っている6面サイコロの場合、ちょっと、答えがブレるようです。10(Jail)は文句なく1番多いのですが、0と24と19は結構近い値になっていて、何度か試行すると順位が変わってきます。
なんか見落としがあるのか・・・