CodeIQを見てたら、次のような問題があった。
問題自体はまぁいいとして、このゲームは割と有名だし、そして必勝法も簡単だ。
ゲームの内容を書いておくと、以下のとおり。
二人で交互に手番を行い、数字を1から順番に1個〜3個ずつ言っていく。
10を言った方が負け。
まず、自分が必ず9を言えるようになれば、相手が必ず10を言うことになるので、必ず勝てる。
そして、手番では1〜3の数字を言えるので、4(= 1 + 3)ずつ数字を区切っていくことで、必ず9を言えるようになる。
具体的には、
- 自分がN-4を言う
- 相手がN-3を言った場合、自分はN-2, N-1, Nを言う
- 相手がN-3, N-2を言った場合、自分はN-1, Nを言う
- 相手がN-3, N-2, N-1を言った場合、自分はNを言う
というふうに、自分がN-4を言えば、必ず自分がNを言うことが出来る。
したがって、
- 9を必ず言えるようにするためには、5を言えればいい。
- 5を必ず言えるようにするためには、1を言えればいい。
- 先手が1と言うことで、先手必勝となる。
馬跳びゲーム
さて、本題の馬跳びゲーム。
このゲームは、動きのシステムを前から考えていたゲームなのだけど、CodeIQのこの問題を見てふと思い出したので、ちょっと紹介してみたいと思う。
人数
2人用。
使う道具
お手軽に遊ぶには、消しゴムと定規を使うといい。
- 先手と後手で消しゴムを3つずつ用意する。
- 10cm以上の定規を1つ用意する。
準備
定規を置いて、0cmの手前に先手、後手、先手、後手、先手、後手の順に消しゴムを置いていく。
図にすると、以下のような感じ。
A: 先手の消しゴム B: 後手の消しゴム +-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A B A B A
ゲーム中、消しゴムはメモリの間に置いていくことになる。
概要と目的
アクションで消しゴムを進めていって、自分が先に10cmのラインを越えることを目指す。
アクション
準備が出来たら、先手から順番に、交互にアクションを行っていく。
アクションで出来ることは、以下のいずれか。
A. ジャンプ
B. 前進
A. ジャンプ
自分の消しゴムを1つ選び、前方の繋がった消しゴムを飛び越えて、その繋がりの先頭へ移動する。
(馬跳びで、自分の前にいる人たちを跳び越えていって、一番先頭に出るイメージ)
例えば、最初の状態で前から2番目のAをジャンプさせると、次のようになる。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A B _ B A A
なお、元々いたところはスキマになる。
ここからさらに、一番後ろのBをジャンプさせると、次のようになる。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ A B B B A A
先程できたスキマまで行ったら、そこで止まることに注意。
B. 前進
自分の消しゴムを1つ選び、その直前がスキマになっていた場合、一歩前へ進む。
(馬跳びで、自分の前に人がいないので、1つ前へ詰めるイメージ)
例えば、最初の状態で前から2番目のAがジャンプした後、前から2番目のBを動かそうとすると、直前がスキマになっているので、一歩前に進むことになる。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A _ B B A A
スキマが2つ以上連続で空いた場合の処理
アクションを行った結果、スキマが2つ以上連続で空く場合がある。
例えば、以下のような状況を考える。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A _ B _ B _ A A
ここで前から2番目のBが前進すると、次のようにスキマが2つ以上連続で空くことになる。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A _ _ B B _ A A
この場合、このスキマがなくなるように、後ろの消しゴムが前へ移動する。
(馬跳びで、置いてかれた集団が慌てて追いかけるイメージ)
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B _ _ A B B _ A A
そして、連鎖的に一番後ろのBも前へ移動することになる。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ B A B B _ A A
終了条件と勝利判定
いずれかの消しゴムが10cmのメモリを越えたら、ゲームは終了。
10cmのメモリを越えたプレイヤーが勝ちになる。
ゲームの一例
初期状態。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A B A B A
前から2番目のAがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A B _ B A A
前から2番目のBが前進。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A _ B B A A
一番前のAが前進。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ B A _ B B A _ A
一番後ろのBがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ A B B B A _ A
一番前のAが前進。
(後続が前へ詰める)
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ A B B B A A
一番後ろのBがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ A _ B B A A B
一番前のAがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ A _ B B A _ B A
前から2番目のBがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ A _ B _ A B B A
前から2番目のAがジャンプ。
(後続が前へ詰める)
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ _ _ _ A B B B A A
一番前のBがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ _ _ _ A B B _ A A B
一番前のAがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ _ _ _ A B B _ A _ B A
一番前のBがジャンプ。
(後続が前へ詰める)
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ _ _ _ _ _ _ A B B A A B
一番前のAがジャンプ。
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ _ _ _ _ _ _ A B B A _ B A
一番前のBがジャンプ。
(後続が前へ詰める)
+-------------------------------------------+ | (定規) | | 0 1 2 3 4 5 6 7 8 9 10 | | | | | | | | | | | | | | +-------------------------------------------+ _ _ _ _ _ _ _ _ _ _ _ A B B A A B
Bが10cmのラインを越えたのでゲーム終了で、後手の勝ち!
なお、校庭に脚でラインを引いて、実際に馬跳びして遊ぶことも出来るので、子供の遊びに使うことも出来るかも。
必勝法は・・・?
さて、問題となるのは、簡単な必勝法が存在するのかどうか。
パターンが多そうかなと思っていたのだけど、考えてみたら、簡単な必勝法があった(^^;
それについては、また今度で。
今日はここまで!