![見出し画像](https://assets.st-note.com/production/uploads/images/88870948/rectangle_large_type_2_f31f8760fec32748f57759cd7ef74b01.png?width=1200)
ミニゲーム 「雲歩き算」 研究
![](https://assets.st-note.com/img/1665588948841-sL9AJBA2Qt.png?width=1200)
![](https://assets.st-note.com/img/1665839357005-7AmjP5dRKw.png?width=1200)
最小のボードサイズは bit_p = 2。
bit_p の bit の由来は 「0 か 1 か」 を意味する bit から、
p は 周期(period)の頭文字だ。
左右はループしてつながっていて、右端と左端は同一だ
このあと頻出する用語の説明
![](https://assets.st-note.com/img/1665589690342-ShDv10Wv7Q.png?width=1200)
上辺を天、下辺を地、天でも地でもないところを目(め)と呼ぶとする。
目は囲碁用語から借用した。
この平行四辺形の天と地は必ず被らないものとし、
目は 有るときもあれば 無いときもある
![](https://assets.st-note.com/img/1665590183953-JEa08qUcDf.png?width=1200)
X軸は 地、目、天 のいずれかで埋まっていると考えてよい。
目は 空きスペース で表した
平行四辺形 「毛」
![](https://assets.st-note.com/img/1665590944005-bxzvhpGZUl.png?width=1200)
小さな数から順に「a(エー)」「b(ビー)」「c(シー)」とか、
「除去可能数」 と呼ばれるが、
なんだか 呼びづらいので
本書では 「毛(け)」 と呼ぶことにする。
毛の形は 「終点 - 始点」 の差で求めた整数で 表すのが簡単だ
羽
![](https://assets.st-note.com/img/1665591646717-fo1VSRrCOt.png?width=1200)
特に名前が無かったから「羽(はね)」と名付ける。
毛は 1つ1つが バラバラに離れて存在することはなく、
すべて 羽 になっている。
毛の形は整数で表せたから、それをまとめて
S={1,2,3}
と書くのが 羽 の簡単な表し方だ。
S の正式名称は「サブストラクションセット」だが、
長ったらしいので 本書では 羽 と呼ぶ
![](https://assets.st-note.com/img/1665592183912-V5Pn60UpLW.png?width=1200)
1つの羽の毛の数は 1個以上なら いくつでもいい
毛に名前を付けたいなら、数の小さな方から a, b, c, … と付けていく
ゲームルール 羽目張り
![](https://assets.st-note.com/img/1665592703377-bGDclrgRNu.png?width=1200)
すべての目から 「羽」 を生やしてほしい。
「天」は何重かに被ることがあるが、構わない。
そして、「目」を無くしてほしい
(右端に無限に続くスペースは目に含めない)
![](https://assets.st-note.com/img/1665593151781-Y1rp1opguA.png?width=1200)
![](https://assets.st-note.com/img/1665593374199-mjQL2L2ow3.png?width=1200)
![](https://assets.st-note.com/img/1665839650619-OE1CNMkmAv.png?width=1200)
bit_p=11 のようだ
1つ目のミニゲーム
「雲歩き算」を まだ説明していない。
(多分、既知の前提知識を説明するだけで
この記事の大半を使うと思うが)
ここで ミニゲームとして まとめることで 一息付けることにする。
2以上の任意の数の bit_p を決め、
その bit_p にピッタリ収まる 羽 S={a, b, c…} を挙げてほしい。
無限に有ったり、1つも無かったりするから、
いい加減 飽きたところで止めるといいだろう
ここで せっかくだから、ループについて説明する
ループ
![](https://assets.st-note.com/img/1665594382387-PXhTTLbBnd.png?width=1200)
2(と3の間) が目に見えるが
![](https://assets.st-note.com/img/1665839726317-HT1MZKsPND.png?width=1200)
目は無くなる。
S={1,3} は、
bit_p=5 にしても目は消えるが正解ではなく、
最小の bit_p である bit_p=2 だけを
正解とするのが決まりだ
![](https://assets.st-note.com/img/1665594954864-xdGmoJhL8C.png?width=1200)
S={1} も
S={1,3} も
S={1,3,5} も
S={1,3,5,7} も
S={1,3,5,7,9} も
![](https://assets.st-note.com/img/1665839811285-ssSKqdiJ9t.png?width=1200)
このように 類型(パターン)化 したり、
その条件を見つけたりしてほしい
![](https://assets.st-note.com/img/1665839886437-8PuSKQYvAg.png?width=1200)
地と天だけを見て言っている。
専門的には 名前が付いていなかったり、
bit-grundy数 と呼んだりするようだが
本書では 特に こだわらない
復習 羽目張り
![](https://assets.st-note.com/img/1665829564669-MxXNupxIwJ.png?width=1200)
一見 bit_p=2 には見えないが、 bit_p=2 になる。
なぜなら
![](https://assets.st-note.com/img/1665829851368-DayfhtrJDM.png?width=1200)
しかし 疑問が残るかもしれない
![](https://assets.st-note.com/img/1665832234324-6OEVi2PQ1E.png?width=1200)
(このような目を 生きた目 とでも呼ぶとしよう)
だから 永遠に 羽目張り を続ける
普通、停止しない計算は
計算機としては不具合だが、
数学でも 囲碁でも 無限を扱う方法がある
無限の扱い方の一例
![](https://assets.st-note.com/img/1665831664689-XGf0Yea4pi.png?width=1200)
もし、羽目張りをして、
同型の 天、地、目 が2度現れたなら、
無限ループしていると考えてよい。
詳しく見てみよう
![](https://assets.st-note.com/img/1665831799057-BKQNPa8NdS.png?width=1200)
一方通行の空間で、来た道のどこかに戻ったなら、無限ループしていると考えていい
では、
無限ループしているのなら、どうするだろうか?
![](https://assets.st-note.com/img/1665832404199-KC5MvkZcuT.png?width=1200)
この例では 「目」と「生きた目」を区別し、
「生きた目」 には 「羽目張りルール」 を適用しない
これで 「羽目張りルール」 の中に含まれた
自動のしくみ が終わる
この変更で矛盾なく 無限ループ 「では、なくする」 ことができる。
(無限ループを止めることはできない。無限ループでなくする必要がある)
![](https://assets.st-note.com/img/1665840005351-k4JiFKloEJ.png?width=1200)
周期より前の部分(pre_bit_p)があるが、
羽目張りルールを止めたときに pre_bit_p が
bit_p の繰り返しで構成されているのと同じに見えるなら
pre_bit_p は無いものと みなす
つまり、あたかも bit_p から始まったものとして扱う
pre_bit_p が有るケース
![](https://assets.st-note.com/img/1665837430718-VxGm1VaorC.png?width=1200)
![](https://assets.st-note.com/img/1665837448765-K6UltjdAzx.png?width=1200)
厚みのある平行四辺形にすると便利だ
![](https://assets.st-note.com/img/1665837462871-7CKt5mivnU.png?width=1200)
新しく 目を2つ作ってしまっているのが見える
![](https://assets.st-note.com/img/1665837733632-Dzyl8bXfTC.png?width=1200)
また新しく 2つの目が作られた
省略するが
ここから先は 繰り返しになるようだ
![](https://assets.st-note.com/img/1665840093819-A0rprlZ1Z3.png?width=1200)
pre_bit_p と bit_p を探してみよう
S={3,7,8} のとき、 bit_p=5, pre_bit_p=11 だ。
詳しく見てみよう
![](https://assets.st-note.com/img/1665838967947-wsilxZACK9.png?width=1200)
bit_p は 5 だ。
pre_bit_p は 11 のようだ
pre_bit_p の長さ や、 bit_p の長さ を、
羽目張り (つまりアルゴリズム的な計算、算法)をせずに、
S={a,b,c,…} から計算で求める方法があるのか わたしは知らない
グランディ数 (p=b+c系)
次に グランディ数 を説明する
![](https://assets.st-note.com/img/1665855684435-0G1tQ1W2rU.png?width=1200)
0番地の下側に 0 を置く
![](https://assets.st-note.com/img/1665855762620-VvGDQrlZYp.png?width=1200)
a の毛に吸いあげられるように
1番地の上側に 0 を置く
![](https://assets.st-note.com/img/1665855862033-SB6erCrw9i.png?width=1200)
最小の非負整数を 1番地の下側に置く
今説明した2行の計算を mex と呼ぶ。
mex は、最小除外数(minimum exclusion)という意味だ
![](https://assets.st-note.com/img/1665855995460-HhssAdvxiH.png?width=1200)
1番地の下側の 1 を まるで aの毛が 吸い上げたかのように
2番地の上側に置く
![](https://assets.st-note.com/img/1665856076783-9OaQkBXEow.png?width=1200)
![](https://assets.st-note.com/img/1665856167918-d68hXvhz81.png?width=1200)
3番地の上側に置く
![](https://assets.st-note.com/img/1665856248966-FeRGIWa6jq.png?width=1200)
![](https://assets.st-note.com/img/1665856322087-Tm42HI1n8v.png?width=1200)
0番地の下側の 0 をまるで b の毛が吸い上げたかのように
4番地の上側に置き、
3番地の下側の 1 をまるで a の毛が吸い上げたかのように
4番地の上側に置く
![](https://assets.st-note.com/img/1665856408389-3a7ocL80hC.png?width=1200)
![](https://assets.st-note.com/img/1665856558489-zOYmmM6Wh1.png?width=1200)
5番地の上側に置き、
4番地の下側の 2 をまるで a の毛が吸い上げたかのように
5番地の上側に置く
![](https://assets.st-note.com/img/1665856592454-38rveiEF0O.png?width=1200)
ここから 少し説明を駆け足にして 時間を進める
![](https://assets.st-note.com/img/1665856717681-5g8tM6G652.png?width=1200)
![](https://assets.st-note.com/img/1665856807635-BWCXx7iNaY.png?width=1200)
![](https://assets.st-note.com/img/1665856897230-bkCtgcZ36k.png?width=1200)
![](https://assets.st-note.com/img/1665857022557-6s3gZPjiZE.png?width=1200)
![](https://assets.st-note.com/img/1665857117136-HDHv6BYokr.png?width=1200)
![](https://assets.st-note.com/img/1665857202713-2XctNQdLGD.png?width=1200)
![](https://assets.st-note.com/img/1665857297161-athBAFnqk8.png?width=1200)
ここで、さらに駆け足で見ていく
![](https://assets.st-note.com/img/1665857415115-OZr3i3AFQv.png?width=1200)
下側に置いてある数を コピーしているだけだ
下側に置いてある数は、
上側に無い最小の非負整数が置いてあるだけだ
この 卵か先か、鶏が先か のようなメカニズムは
下側の数が先で、上側の数が後だと言える
下側に置いてある数を よく見てみると
![](https://assets.st-note.com/img/1665857834067-Qor0M3lHCB.png?width=1200)
と言えるのだそうだ
p は周期(period)
pre_p の長さ や、 p の長さ を、
毛を使った吸い上げや、 mex (つまりアルゴリズム的な計算、算法)
を使わずに、
S={a,b,c,…} から計算で求める方法があるのか わたしは知らない
隣合いを考えるグランディ数
![](https://assets.st-note.com/img/1665880060954-C7bprslBGy.png?width=1200)
並べたときの 色 の指定だ
![](https://assets.st-note.com/img/1665912706502-NmV9GbokcE.png?width=1200)
あれっ? と思うことがある
![](https://assets.st-note.com/img/1665912857006-3BxV8IlBKw.png?width=1200)
上図 ? の場所も隣なのかな、と思うが
そうではない
![](https://assets.st-note.com/img/1665912991165-wZLarM0QKp.png?width=1200)
a と c が 「隣」 の感覚を十分満たしているのだから
いいじゃないか
ということかもしれない。
計算において、感覚とピッタリではないが
十分だからいいじゃないか、ということは よくある
![](https://assets.st-note.com/img/1665913253956-nCmFvVOvKX.png?width=1200)
![](https://assets.st-note.com/img/1665913461597-eD7SDyAuVV.png?width=1200)
考えなくていい
mex とは
![](https://assets.st-note.com/img/1665880335679-Sithn1Spo9.png?width=1200)
![](https://assets.st-note.com/img/1665880640005-OWv4Sax9g2.png?width=1200)
うまく対応している
しかし cの毛はどうするのだろう。
未来を指している。
これをどう解決するのか 私には勘が働かなかったが、
イラストレーションを続けると、 mex はそれにも うまく対応する
![](https://assets.st-note.com/img/1665880897760-wTetYlzgWP.png?width=1200)
![](https://assets.st-note.com/img/1665881011028-K06APJFCCc.png?width=1200)
S={a, b, c} では毛が a と b と c の3本あるが、
これは 上図のテープのようなものが 3本しかないことと
一致するのかもしれない
![](https://assets.st-note.com/img/1665881232309-gR1cGMmIBz.png?width=1200)
グランディ数 (p=c+a系)
S={1,4,8} は p=b+c=12 だった。
周期は b+c だけではなく、場合分けが数多くある。
次は周期が p=c+a のケースも見てみよう
![](https://assets.st-note.com/img/1665917038119-7so6wQ2AxB.png?width=1200)
![](https://assets.st-note.com/img/1665929904197-mq3hsIDcls.png?width=1200)
0~2番地の上側は何も吸い上げられないので
0 を置いておく
1~2番地の下側は mex せず、
0 を置いておく
![](https://assets.st-note.com/img/1665929999192-niKGfqYN5a.png?width=1200)
![](https://assets.st-note.com/img/1665929838934-0wNhnOBpsY.png?width=1200)
この記事が気に入ったらサポートをしてみませんか?