父よりすごい三山くずし必勝法

小六のふたごらが夏休みの宿題で提出したものが、まぁまぁのできだったので小学生から高校生を対称にしたある算数コンテストに出してみたらそこそこの賞を得てしまった。
でも特別賞と2,3の優秀賞しか内容を公開されていない。結構おもしろいできで、かれらも最後の方でいっているようにこんなやり方はネットでないようなので、せっかくだから、親馬鹿の勢いもあってネットに残して置こうと思う。
なお久しぶりのアップでもあり行間が間の抜けたものになっているけど、それはかれらのせいではないのであしからす。


考えたきっかけ
三山くずしというゲームがあります。ルールは次の通りです。

「小石がいくつか三つの山に分けて積んである。二人のプレイヤーが交互に石を取っていく。ただし一度に二つ以上の山から取ることはできない。一つの山からなら何個 取ってもよい。最後に石を取ったプレイヤーが勝ち」

数年前,父からそのゲームのことを教えてもらい,父とやってみましたが,なんどやっても勝てずふたりとも悔しい思いをしたことがあります。
最近,ある雑誌にこのゲームに必勝法があると書いてありました。ひょっとしてその方法を父はずる賢く使っていたのではないかと思い,その必勝法をふたりで考えてみました。
簡単な必勝型を考えた
わかりやすいように,できた形を相手に渡すことを ↑ で ある形を相手から受け取ることを ↓ で表すことにしました。
また三つの山の個数をそれぞれ A,B,C とすると (A,B,C)で表すことにしました。
またよりわかりやすくするため,受け取りのつながりを表す → を使いました。当たり前のことですが,一山だけ残して相手に渡すと必ず相手はそれを全部取って勝ってしまうので,そのような場合を考えるのをときどき省略しました。

そこで相手に渡すときの必勝型がないか考えてみました。まず思い浮かぶのが (1,1,1) です。
これはたとえば
↑(1,1,1)→ ↓(1,0,1) → ↑(0,0,1) または 
↑(1,1,1)→ ↓(1,1,0) → ↑(1,0,0)
などで必ず相手が最後に取る形になり負けてしまいます。
では↑(1,2,1)→ は? これはたったいま見たように自分が負けてしまうので相手が(1,1,1)の形をこちらに返すことはありません。だから相手が返すのは
↓(1,0,1)→ か ↓(0,2,1)→  ですが ↓(1,0,1)→↑(0,0,1)で相手は必ず勝つので,これを返してくるはずです。だから
↑(1,2,1)→ は 負けです。

では ↑(1,2,2)→ は?
(1,2,1)はたったいま見たようにこれを相手に示せば負けなので相手がその形を渡すことはありません。だから
↑(1,2,2)→↓(1,2,1)または
↑(1,2,2)→↓(1,1,2)はありません。
だから↑(1,2,2)→ のあとは ↓(1,2,0) か ↓(0,2,2)になります。これは(1,2,0)と(0,2,2)は山が二つになったことになります。では(1,2)と(2,2)のそれぞれの ↑ ↓ はどうなっていくのだろうと考えていると,あることに気づきました。
↑(1,2,1)→ を考えたときにも↓(1,0,1)→ か ↓(0,2,1)→ の形が出てきています。これも二つの山になっているわけで,まず二山くずしの必勝型があるか考える必要がありそうだということです。

二山の必勝基本型を考える
これもまず思い浮かぶのが (1,1) です。これは簡単で ↑(1,1) → ↓(0,1)と必勝型です。では最初の山をひとつ増やしてみます。
↑(2,1) → ↓(1,1) これは相手から必勝型を出されることになり負けです。
さらに続く数は以下のように考えられます。

↑(3,1) → ↓(1,1)
↑(4,1) → ↓(1,1)
-------- 
↑(n,1) → ↓(1,1)

だから(n,1)の形で必勝型は (1,1)だけです。
次に(1,2)の形を考えましたが,これは(n,1)で n=2 のとき一度考えているので実際は(2,2)から見ればいいことになります。
↑(2,2) → ↓(1,2)→ ↑(1,1) で(2,2)は必勝型です。
そのあとに続く数は以下のように考えられます。

↑(3,2) → ↓(2,2)
↑(4,2) → ↓(2,2)
-------- 
↑(n,2) → ↓(2,2)

相手から必勝型を出されることになり負けです。

だから(n,2)の形で必勝型は (2,2)だけです。

次に(1,3)の形を見ますが,これは (1,2)と (1,3)は(n,1)で n=2とn=3 のとき一度考えているので実際は(3,3)から見ればいいことになります。
すると同じように (n,3)の形での必勝型は (3,3)ということになります。
以下も同じで,だから二山くずしの必勝型は (n,n)であることが分かりました。

三山の必勝型を考える
簡単な形は↑(1,1,1)でしたが,→↓(0,1,1)になり相手が二山くずしの必勝型を出すのでこちらの負けです。
次にひとつ増やした場合を考えようとしましたが,少し戸惑ってしまいました。
というのはひとつ増やしたときは (2,1,1) なのか (1,2,1)なのか,(1,1,2)なのかこれまではっきりと考えていないことに気づきました。
だから数え上げの仕方を樹形図を使って考えてみました。

(1,1, )-(1,1,1)
        (1,1,2)
        (1,1,3)
        -------
        (1,1,n)
(1,2, )-(1,2,1)
        (1,2,2)
        (1,2,3)
        -------
        (1,2,n)
(1,m, )-(1,m,1)
        (1,m,2)
        (1,m,3)
        -------
        (1,m,n)

これらを数え上げたあと

(2,1, )-(2,1,1)
        (2,1,2)
        (2,1,3)
        -------
        (2,1,n)

という順に考えればいいと思いました。
だから(1,1,1)をひとつ増やした場合は(1,1,2)を考えることにしました。
これは(1,1,1)と同じように→↓(0,1,1)となり,さらには(1,1,n)はすべて負け型と分かります。

次に考える場合は(1,2,1)です。これも
↑(1,2,1)→ ↓(1,0,1) で負けます。

次の ↑(1,2,2)も → ↓(0,2,2) で負けです。
次の ↑(1,2,3)は少し複雑になり,こちらが自滅しないような場合分けが必要でした。

↑(1,2,3)→ ↓(0,2,3)→↑(0,2,2)
↑(1,2,3)→ ↓(1,1,3)→↑(1,1,0)
↑(1,2,3)→ ↓(1,0,3)→↑(1,0,1)

↑(1,2,3)→ ↓(1,2,2)→↑(0,2,2)
↑(1,2,3)→ ↓(1,2,1)→↑(1,0,1)
↑(1,2,3)→ ↓(1,2,0)→↑(1,1,0)

やったー! 三山くずしの初めての必勝型が見つかりました。

次に考えるのは (1,2,4)です。でもこれは
↑(1,2,4)→ ↓(1,2,3)と必勝型を相手から出されることになり負けです。
同じように

↑(1,2,4)→ ↓(1,2,3)
↑(1,2,5)→ ↓(1,2,3)
 -------- 
↑(1,2,n)→ ↓(1,2,3)

で (1,2,n)の形の必勝型は (1,2,3)だけと分かりました。

次に考えるのは (1,3,1)ですがこれは (1,1,n) を見たとき、n=3で一度考えていることになります。また次の (1,3,2)も-これは必勝型でした-(1,2,n)を見たとき、n=3 で一度考えていることになります。次の(1,3,3)は → ↓(0,3,3)なので考えるのは(1,3,4) とそれ以降の組み合わせです。
でも(1,3,n)は → ↓(1,3,2)で負けです。だからnが4以上の(1,3,n)には必勝型がありません。

次に考えるのは (1,4,1)ですが,これも同じように (1,1,n)を見たとき、n=4 で一度考えています。次の(1,4,2)も (1,2,n)を見たとき、n=4 で一度考えていて,次の(1,4,3)も (1,3,n)を見たとき、n=4 で考えています。次の(1,4,4)は → ↓(0,4,4)なので考えるのは(1,4,5) とそれ以降の組み合わせです。

↑(1,4,5)も少し複雑になり,これもこちらが自滅しないような場合分けが必要でした。

↑(1,4,5)→↓(0,4,5)→↑(0,4,4)
↑(1,4,5)→↓(1,3,5)→↑(1,3,2)
↑(1,4,5)→↓(1,2,5)→↑(1,2,3)
↑(1,4,5)→↓(1,1,5)→↑(1,1,0)
↑(1,4,5)→↓(1,4,4)→↑(0,4,4)

↑(1,4,5)→↓(1,4,3)→↑(1,2,3)
↑(1,4,5)→↓(1,4,2)→↑(1,3,2)
↑(1,4,5)→↓(1,4,1)→↑(1,0,1)
↑(1,4,5)→↓(1,4,0)→↑(1,1,0)

最後はすべて必勝型で(1,4,5)は三山の二つ目の必勝型だとわかりました。

次は(1,5,1)ですが,いままでと同じように(1,5,6)から考えればいいとわかりました。でもこれも同じように相手から(1,5,4)の必勝型を返されることになり負けになることがわかります。

次は(1,6,1)ですが,いままでと同じ理屈で(1,6,7)から考えました。
↑(1,6,1)も少し複雑になり,これもこちらが自滅しないような場合分けが必要でした。

↑(1,6,7)→↓(0,6,7)→↑(0,6,6)
↑(1,6,7)→↓(1,5,7)→↑(1,4,5)
↑(1,6,7)→↓(1,4,7)→↑(1,4,5)
↑(1,6,7)→↓(1,3,7)→↑(1,3,2)
↑(1,6,7)→↓(1,2,7)→↑(1,2,3)
↑(1,6,7)→↓(1,1,7)→↑(1,1,0)

↑(1,6,7)→↓(1,6,6)→↑(0,6,6)
↑(1,6,7)→↓(1,6,5)→↑(1,4,5)
↑(1,6,7)→↓(1,6,4)→↑(1,5,4)
↑(1,6,7)→↓(1,6,3)→↑(1,2,3)
↑(1,6,7)→↓(1,6,2)→↑(1,3,2)
↑(1,6,7)→↓(1,6,1)→↑(1,0,1)

最後はすべて必勝型で,ということは(1,6,7)は必勝型です。

見つけた!!
これまでの必勝型をまとめてみます。
(1,2,3)(1,4,5)(1,6,7)
なんだか分かってきました。きっと次の必勝型は
(1,8,9)のはずです。

いままでの考えを繰り返すと(1,6,7)の次の必勝型を考えるのは(1,7,1)からです。
でもいままでと同じ理由で↑(1,7,8)から考えればいいことになります。でもこの形はいままで通り →↓(1,7,6)になり負けてしまうのです。
だから次の(1,8,1)を考えることになります。これも(1,8,9)から考えることになります。

↑(1,8,9)の1個だけの山を取って返すときは →↓(0,8,9)→↑(0,8,8)で勝ちです。また →↓(1,8,8) は ↑(0,8,8)で勝ちます。
問題はそれ以外の8個か9個の山から取って返す場合です。

難しそうでしたが,ふたりでいろいろ話しているうちに規則性を見つけました。
8と9は,9を最初に考えると9,8,だから奇数とそれより1少ない偶数です。

ということは相手が8と9のどちらの山から取ってもまた奇数とそれより1少ない偶数の形にすることができ,それはいままで分かった必勝型(1,2,3)(1,4,5)(1,6,7)のどれかです。

だから(1,奇数,その奇数より1少ない偶数)の形でそのひとつ前の形が必勝型であるなら,その形は必勝型になるはずです。

ということで、お待たせしました。発表します。

これが三山くずしの必勝法だ

 1)最初にひとつの山を1個にする
 2)もし相手が二山の状態を作れば,(n,n)の形にする
 3)もし相手が1個の山以外から取れば 1個以外の二山を奇数個とその奇数-1個の形にする

インターネットで調べてみた
三山くずしの必勝法がないか、インターネットを利用しましたが,調べた限りではわたしたちのやり方は見つかりませんでした。そのかわり,2進法の足し算に似たやり方で桁を繰り上げないような計算で必勝型を作るというものがありました。
たとえば
(4,3,7)の山があったとします。これは2進法で
(100,11,111)です。
2進法でそれぞれの山のを足すと

 100
 011
 111
——–
1110

ですが,桁を繰り上げないと

 100
 011
 111
——–
 000

になります。

こうした計算で0だけの形にできれば,それが必勝型だというのです。
実際に二人でやってみました。先手がその必勝法を知っていて,もうひとりは知らないということでやった結果をいくつか書きます。最初の三山の個数は適当にしました。(0000)などと書かれているのは上にある三山の合計を繰り上げのない2進法で計算したものです。
確かに勝ちましたすが、どれもとても大変でした。また結局最後は、今回分かった必勝法と同じ形になると思いました。

最初(12,7,21)→↑(12,7,11)→↓(12,5,11)→↑(12,5,9)→↓(7,5,9)→↑(7,5,2)→↓(6,5,2)→↑(6,4,2)→↓(5,4,2)→↑(5,4,1)                 

最初(14.8.11)→↑(14、4,11)→
↓(14,4,9)→ ↑(13,4,9)→↓(13,4,7)→↑(11,4,7)→↓(11,4,3)→↑(10,4,3)→↓(7,4,3)→↑(3,4,3)→↓(3,2,3)→↑(1,2、3)

最初(13.9.6)→↑(11,9,6)→
↓(11,8,6)→ ↑(11,8,2)→↓(7,8,2)→↑(7,8,1)→↓(7,5,1)→↑(5,4,1)

最初(11110)→↑(0000)→↓(0010)→↑(0000)→↓(1011)→↑(000)→↓(001)→↑(000)→↓(011)→↑(000)                 

最初(1101)→↑(0000)→
↓(0011)→ ↑(0000)→↓(1100)→↑(0000)→↓(1010)→↑(0000)→↓(101)→↑(000)→↓(10)→↑(00)

最初(0010)→↑(0000)→
↓(0101)→ ↑(0000)→↓(1101)→↑(0000)→↓(011)→↑(000)
                 

まとめ
このやり方を見つけるのに、きちんと数え上げることがとても大切だと感じました。
父はどういう風にやっていたか聞くと、この2進法のような計算をしていたということでした。以前の対戦で父がテーブルの片隅でなにかこそこそやっていて、ときに「あ,間違えた」などといっていたことも思い出しました。でもなぜそうすれば勝つのかは知らないらしいです。

二人でその方法を使って実際にやってみると相手に勝つまでにかなり面倒な計算をしました。相手が必勝法を知らないなら,今回分かった方法が簡単で絶対いいと思いました。

でもなぜ2進法のような計算が必勝型になるのかも、気になります。
わたしたちのやり方は ひとつの山を1個 にすることから始めました。でもその山を2個以上にしたときのことを考えていませんでした。
きっとそれをていねいに数え上げていくと2進法のようなやり方になっていくような気がします。

参考にしたホームページ
三山くずしの数理とゲームマシン http://maicommon.ciao.jp/ss/dscrtMath2/nim_hs/index.htm (見た日 2018年8月14日)