「 CgfGoBan では、GTPエンジン同士の対局ができないぜ」
https://github.com/Remi-Coulom/gogui

「 ↑ レミさんの GoGui の TwoGTP を使いましょう」
「 何だぜ それ?」

「 ↑ 使い方が分からんなあ」

「 目に付いたファイルを適当にダブルクリックしていけばいいんじゃない?」

「 Java 言語のソースコードが入ってるぜ?」

「 Java 嫌いだから 止めで」

「 好き嫌い わらう」

「 ↑ あれっ! きふわらべ 弱ぇ~」

「 ニューラルネット 入ってないんで」

「 ニューラルネットって どういう理屈なの?」

「 行列演算に過ぎないぜ」

「 ポリシーネットワークか、バリューネットワークか、
アルファゼロ型の 両方が一体化したやつが要るんじゃないの?」

「 アルファゼロ型は ディープラーニングなんで 今から実装は無理」

「 囲碁のパラメーターって何があるんだぜ?」

「 黒石の位置、白石の位置が あるんじゃないか?」

「 あと手番ね」

「 9路盤のニューラルネットは、19路盤で 使えるのかだぜ?」

「 使えないんじゃないか?」

「 何路盤でも使える知識をくれだぜ」

「 囲碁が強くなる理論 知ってれば プログラムするけど」

「 できるところから やりましょう。
シチョウ対策って どうやんの?」
依田紀基囲碁講座「シチョウの読み方」ダイジェスト~なぜ早碁は1手10秒なのか~

「 ↑ ナナメの線を読めばいいらしいぜ」

「 図解してくれだぜ」

「 ↑ シチョウ の必要条件は上図だぜ。
『し』の字の釣り針 みたいな形に 手水で水をすくうみたいに
石が1個 すっぽり入っていて、
黒が次の1手で逃げようとしたら シチョウ になるぜ」

「 ↑ B7 !」

「 ↑ B6」

「 ↑ C7 !」

「 ↑ D7」

「 ↑ C6 !」

「 ↑ C5」

「 ↑ D6!」

「 ↑ E6!」

「 ↑ D5!
あれっ……?」

「 気づいたか!」

「 ↑ 繰り返しを感じたぜ」

「 ↑ シチョウ ができたわよ?」

「 シチョウ ができたら 勝負が終わってるが、
助からないシチョウ と、 助かるシチョウ がある。
その判断の説明は めんどくさいから省くが、
助かるか助からないかの判定も コンピューターにやらせたいぜ」

「 ↑ シチョウ のベースケースを 一覧したぜ」

「 しなくていいのに……」

「 ↑ 頭の中で 考えることはできないので 方眼紙で 脳の代用だぜ」

「 これ全部 線形 で説明できるんじゃないの?」

「 ↑ 何か法則性があるのかな?」

「 お父ん、数字ではなく 全部 ベクトルで つなげだぜ」

「 ↑ なんか 座標の足し算になってるな」

「 どういう足し算なのか 具体的にしなさいよ」

「 ↑ 具体的にしたけど、どうやって 一般化 するんだぜ?」

「 x,y の2軸あるから 一般化しにくいのだろう。
x,y を止めて、 盤の左上を0として自然数を並べた通し番号の
1軸に 1本化してみたらどうだぜ?」

「 アドバイスが具体的なの わらう」

「 ↑ うーん、なんか周期性でもあれば いいんだけど よく分かんないな」

「 無ければ、作ればいいのでは?」

「 自分の中に すでに使い慣れたパターンがあって、それに シチョウのアルゴリズムを
ピッタリ 当てはめればいいわけかだぜ」

「 白石の位置、 黒石の空点の位置から 差分が取れないの?」

「 もっと細かく 特徴を抽出するわけかだぜ」

「 ↑ 差分は 白石が1個 どちらか1方に寄るだけだぜ。
3つの白石は 動いてないぜ」

「 じゃあ その動いていない白石が どのような働きをしてるか 差分を消して
洗い出せだぜ」

「 桃色のベクトルに成分はありそうだけど、
水色のベクトルの成分が分からないぜ」

「 手数 も特徴なのでは?」

「 ↑ おっ、 うまくいったぜ!」

「 じゃあ 桃色のベクトルにも 手数の特徴があったんじゃないの?」

「 調べ直してみるか……」

「 ↑ 桃色の線も 特徴を抽出でけたぜ」

「 ちょろい もんですな」

「 この特徴を 高速で区別するアルゴリズムを考えてくれだぜ」

「 丸投げ わらうwwwwwwwww」

「 手順 1、2、3、4 で並べ替えてみようぜ?」

「 ↑ 初形に含まれている形と、何手目かで 次の着手は一意に決まるぜ」

「 高速にパターンマッチングするには どうやればいいの?
空点の位置、黒石の位置、白石の位置、壁の位置 のマッチングで4回?」

「 最初は if文 で書くかな」

「 盤の辺からのシチョウ、 盤の角からのシチョウが 含意されていないのでは?」

「 されてないな! どうすっかな!」

「 ↑ はい! 壁も 含意したぜ!」

「 じゃあ コーディングに向けて 詳細を詰めてみようぜ?」

「 じゃあ 黒石を どこに置こうかな?」

「 ↑ ここに置こうかな?」

「 置いたところは 黒石に確定してるから、 その周りの8近傍を
高速にパターンマッチしたいのよ」

「 8パターンあって、8近傍を調べたら、最悪のケースで 64個の交点を
チェックしないといけないな」

「 ↑ とりあえず 8近傍に 番号を振ろうぜ?」

「 ↑ 周りを くるっと巻いているのは パターンマッチが難しいので
右から左へ 一直線に並べようぜ」

「 ↑ 右から左へ 2のn乗の点数が付くと考えようぜ。
この石の並びは 64+16+8+1 になるから 89 だぜ」

「 ↑ n乗した数を 総和すれば 一意の数になるのかだぜ。
これなら 足し算8回で 1つの数は出てくるな」

「 長さ 256 の配列を予め作っておいて Pattern[89] は 2番、みたいに
入れとけばいいのよ」

「 あっ、 壁の含意を忘れてるぜ」

「 ↑ 壁に置き換えても OK なところに ひし形のマークを付けておいたぜ」

「 パターンマッチできるような 気がしてきた……!」

「 空点のパターンマッチはしなくていいの?」

「 要る!」