こちらの文献をまとめる。
- 連珠のルール
- Free Renju Rule
- プレイヤーは仮の黒、仮の白としてプレイする。仮の黒、の人は、真ん中に石を置く。
- 仮の白、の人は、黒石に隣接した位置に石を置く。
- 仮の黒、の人は、真ん中の5×5格子、の空き場所に石を置く。
- 仮の白、の人は、白と黒を入れ替えることが出来る
- 白の人が、4つ目を置く
- 黒の人は、2つの(非対称の)置ける場所を指定する。
- 白の人は、そのうち1つを指定し、黒石を置かせる。
- 6つめ以降は制限無し。
- Overline
- 6つ以上の石が連続して並ぶこと。
- Five
- 丁度5つの石が連続して並ぶこと。
- Straight Four
- 丁度4つの石が連続して並ぶこと。
- Four
- 4つの石があって、次に5になれるもの。
- 連続とは限らない。
- 3、無し、1
- 2、無し、2
- Three
- 次の一手で、Fourになる。
- 3つの石
- 3つ連続
- 1、無し、2
- Double Four
- Fourを2つ以上同時に作ること
- Double Three
- Threeを2つ以上同時に作ること。
- Four Three
- FourとThreeを同時に作ること。
- VCF
- Victory by Consecutive Fours
- Fourを連続で作って勝つこと
- VCT
- Victory by Consecutive Threat
- Four またはThreeを連続で作って勝こと
- Fukumi
- VCFで勝つ恐れのある動き
- 防御しなければ、負ける
- Yobi
- VCFで勝つ恐れのある動き
- 強制力はない。
- 防御しなくても耐え得る
- Free Renju Rule
- ここから後は、とても計算量が要る(し、この文献には詳しいコードが書いていない)ので、5目並べの最適戦略を求めるのは、止める。
- 実際に最適戦略をとって、相手も最適防御を見せたら、47手で終わったよ、という図が文献中にある。
- このまま、記事を終わるのも、もったいないので、n目並べについて考える。
- 1目並べは先手必勝。(当たり前)
- 2目並べも先手必勝。(当たり前)
- 3目並べも先手必勝。(繋げるだけ)
- 一般に、n目並べは、n-1個の連続する玉で、両端が空きのものを作れたら、次は片方しか止められないから、自動的に勝利確定
- 3目並べは、(端っこが有限でないとすると、)1個置いた時点で、どうあがいても、2個連続かつ両端空の状態に持っていかれる。
- 4目並べは、どうか。
- さっきの最初の縛りをありで、考えてみると、必勝
- さっきの縛りとは、
- 2手目は隣接した箇所に置く
- 3手目は5×5の格子の中の空き場所に置く。
- 15×15の板(5目と同じ環境)
- 縛り無しでも良い。しかし、二手目が無数にあり得るから、探索したことにならない。それでも勝てないから良いが
- さっきの縛りとは、
- お絵描きする。
- さっきの最初の縛りをありで、考えてみると、必勝
最初の配置が縦か横に隣に置かれた場合
3手目はこうする。
1)次に、相手が緑や紫の位置に置いてきたら、黄色の位置に置いて、2つの1個飛ばしの状況にする。
こうなれば、どっちかは4目並びまで行ける。
2)問題は、(-1,-1)の位置に青色石を置かれた場合である。この場合は、(1,-1)の位置に置く。
その後、緑、紫の位置に置かれなければ、そこに置けば、Straight Threeとなるので、勝ち確定。
ここで、黄色の位置に置かれたらどうなるか、という疑問が湧く。その場合、置かれていない方の黄色の位置に置けば、防御できる。さらに、黄色に置かれることと、紫、緑の筋は関係しないので、議論しなく良い。
最後に、緑か紫が抑えられた場合の話をする。仮に両方抑えられたとしても、以下のようにすれば勝てる。
(1,1)に置く。これは王手なので、相手は、(3,3)に置かざるを得ない。
そして、緑に置く。すると、Straight Threeが出来上がる。よって勝利。
4手目が(-1,-1)だった時の話は完結。
3)4手目がそれ以外の時は、そのまま、Straight Threeを作るだけ。簡単。
以上より、2手目が、縦横に隣接する場合は勝てることが分かった。
ここからは、斜めに隣接する場合が残る。以下のような配置で攻めることになる。
これまた、場合分けが必要になるが、結局は勝てる。これの確認は読者に任せることにしよう。(ヒント(?):オレンジのところに青が置いた場合、少し複雑な場合分けが登場する)
上の図のコードは以下。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
xb = [0,2]
yb = [0,0]
xw = [-1]
yw = [-1]
plt.scatter(xb,yb,color = "red",marker = "o",s = 700)
plt.scatter(xw,yw,color = "blue",marker = "o",s = 700)
plt.xlim(-4,4)
plt.ylim(-4,4)
plt.scatter(-1,0,color = "orange",marker = "o",s = 700)
plt.grid()
plt.show()
- おまけだが、この5目(4目)並べのようなゲームは、一般に(m,n,k) gameと言われる。こちら。
- (m,n,k)gameについて、より大きなkや、より小さなm,nで先手必勝なら、もとのゲームも先手必勝。という結果が知られている。
- これは、5目並べが先手必勝なら、4目並べも先手必勝ということを意味する。
- 戦略拝借論証(m,n,k gameに日本語のWikiよりこちらがわかりやすい)
それでは、
Bye-Bye!