とろろ碁 を高速に開発しようぜ☆(^~^)<その1>

あっぴょぼ☆(^~^) 公開下書き

2020-05-18(mon) 10:00 - 翌 03:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これを作ればいいわけか☆」

Tweet

20200518go1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 類似の製品は無いの?」

KIFUWARABE_80x100x8_01_Futu.gif
「 作った後で探そうぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まず、わたしが 類似の製品作ってそうだよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 しかし、わたしの研究フォルダには、石に向きがある という発想のものは無かったぜ☆」

20200518go2.png

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ 今から 地力実装で☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ゲーム屋から見たリクツとしては……☆
と、絵を示すにも Windows Paint しか持ってないんだが☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 GIMP で☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 GIMP でブラシサイズって どう変えるんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ツール・オプション よ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何その プログラマーが作ったみたいな インターフェースは……☆」

20200518go3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こういう風に モチ がくっつくのは どうやって作るかと言うと……☆」

20200518go4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 境界線レイヤーを下に作っておいて……☆」

20200518go5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 体色レイヤーで上から塗ってしまえば うまくいく☆
境界線が微妙……、なとことか 意識するような 作りにしてはいけない☆ 突き抜けて 上から塗りつぶせだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 くっつくのは 簡単かだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 また……☆」

20200518go6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 接合部を がんばっていてはいけない☆ ちょっと細めるぐらいでいい☆」

20200518go7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 反対側も同様だぜ☆」

20200518go8.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これで 境界線レイヤー を重ねて、その上に 体色レイヤーを重ねれば うまくいく☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 グラデを掛けていては うまく行かないのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 絵描きには絵描きの理屈のやり方が、ゲーム屋にはゲーム屋の理屈のやり方がある☆
わたしたちは 美術展に入賞したいわけじゃないんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 でも わたしたちは Unity の審査に落ちるのよね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 やるなら STEAM だな☆ で、グラデだが……☆
くそ、この餅 真っ白にしてしまった☆ これ以上 ハイライトできないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うーん☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 わたしは見た☆ お父んが アルファ・チャンネルをいじって 諦めたのを☆」

20200518go9.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば、ふつうに ハイライト を接合しようとすると、細かな調整がいるわけだぜ☆
これは、体色に比べ、突き出して 目立つから ダメなわけだぜ☆」

20200518go10.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ じゃあ、ハイライトは端まで伸ばさず、 真ん中のちょびっとにしようぜ☆」

20200518go11.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 向かいあうパーツも同様☆」

20200518go12.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 重ね合わせると うまいこと いくな☆
このように タイル全てを 境界線レイヤー、体色レイヤー、ハイライト・レイヤーに分けるんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 わたしは思う☆ こんなんできるの お父んだけでは☆?」

20200518go13.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 影になっている方も同様だぜ☆」

20200518go14.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 接合部を気にしつつ、こういうのは ざくっと合わせて あとで調整だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 もう少し 幾何学的に 進めましょうよ?」

20200518go15.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 前に CAD のソフトをインストールしたあとに 5分もかからず 投げたからな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 最終的には タイルパターン なんじゃないのか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ゲーム・グラフィック、 シナリオ、 レベル・デザイン は 接合部をぼやかすのが コツ だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 レイヤーが多いのが つらいんだけど?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 グリッド引けないのかだぜ、 GIMP で ピーっと☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んなら 引けるんじゃないか、ピャッピャ と☆」

20200518go16.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こういうのは 大きく描いて、あとで 縮小するのが いいんだぜ☆」

20200518go17.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こんなん作っていけばいいんじゃないか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 いくつ描くの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 8方向について ON/OFF があるから、2の8乗じゃないか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 256個も描くの嫌なんだけど?」

KIFUWARABE_80x100x8_01_Futu.gif
「 部品を共通化して 削減できないのであろうか☆?」

20200518go18a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ つまり こういうことかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 どういうことだぜ☆!」

20200518go19a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 256パターンも作らなくていいのか……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 角っこを パーツにすれば、もっと減らせない?」

20200519go20.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ つまり こういうことかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 どういうことなんだぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 パーツを4分の1にして、角はフタにするんだぜ☆」

20200519go22a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ if文も置いておこう☆ 最大8回判定するのがいやな奴は
PEXTビットボード という超速のテクニックを使えだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 if文でいいと思う☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あれっ、というか if文使わなくても 16進の足し算でいけないか これ…… 眠……☆(^q^)Zzzz」

2020-05-19(tue) 17:40 (着目から 17 時間経過 - ) - 翌01:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 足し算でいける☆ 説明しよう☆」

20200519go23.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 真ん中の石から見て、8方向に16進数 が降ってあるとしろだぜ☆
そこに石があれば その数を足せだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そんな説明聞いても分からん人が とろろ碁 で遊びたいのに……☆」

20200519go23a1.png
20200518go19a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 足せば 画像番号が出てくる☆ デターミニスティックだぜ☆」

20200519go24.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ しかし それでは ありえない組み合わせが可能になるぜ☆ イリーガル☆」

2016_8_5_23_1_51_111_c1.png
「 ぐぬぬぬぬ! イリーガル番号には うそ画像でもパディングしておけば 対処はできるが 情報技術の最先端マンが そんなことはやりたくないぜ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 連番 間違いがあるんじゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee.gif
「 あーっ、 ある☆!

20200519go25.png

20200519go25a1.png

20200519go25a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee.gif
「 ↑ とりあえず 見つけたところだけ修正だぜ☆」

20200519go25a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんだこの 0除算 みたいな 計算不可能な二項演算の項の組みは☆ どういう群なんだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 コンピューター囲碁を作っているより面白いよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ダメよ ダメよ ダメよ ダメよ 囲碁に戻ってくるのよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee.gif
「 統計は 数学ではないのですか? と質問してくる人のために 真実の数を見せる良い機会だぜ☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 あとでいいのに……☆」

KIFUWARABE_80x100x8_09_Umm.gif
「 00、 10、 20、 30 ……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何か 見つけたか☆?」

20200519go27a1.png

KIFUWARABE_80x100x8_09_Umm.gif
「 むむむ……☆ 何かが視えてきそうだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 何も見えてこなくていいのよ! とろろ碁 を作りましょうよ!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 視えた☆!

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 見えなくていいのに……」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 10の位を 15から引けばいいんだぜ☆」

20200519go27a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 2倍、2倍、になっている宇宙が視えるだろ☆
02 のパターンだけ 0,8 だけでなく 2週目の宇宙に入って 仮想の 16, 24 まで視えてしまうのはお得だぜ☆
だから 緑色の長方形は 本当は 長方形ではなく……☆」

KIFUWARABE_80x100x8_09_Umm.gif
「 絶対 if文連打した方が早いと思う☆」

20200519go27a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 こうなってるわけだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 とろろ碁!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ Java Script で仮実装してみるかだぜ☆」

https://github.com/muzudho/tororo-go-js

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Java Script でリポジトリ立てるの初めてなんだが☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 左にふつうの 13路盤、 右に とろろ盤 を置いてくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 横に26路も置けるだろうか……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 HTMLという文書構造で 横に26路 というのは 慣習の範囲外だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 やるしか☆」

20200519go28.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 盤面を GNUGo みたいに表記して、これを Pythonスクリプトを使って HTML に変換しようぜ☆」

board = """\
.x...o......./
ooxxxxoo...../
.oox..x..o.../
o.oox..x...../
oooox....o.../
xxxx..x.o..../
............./
.......x.o.o./
.x........ox./
ox.x...x.oxx./
.ox....xooxxo/
oox....xxxoo./
.o.........../
"""

# print(board)

for stone in board:
    if stone == '.':
        print('<img src="img/s.png">', end='')
    elif stone == "x":
        print('<img src="img/b.png">', end='')
    elif stone == "o":
        print('<img src="img/w.png">', end='')
    elif stone == "/":
        print('<br>')
    elif stone == "\n":
        pass
    else:
        print(f"[{stone}]?", end='')

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 基本的な考え方はこれで、細かいところは拡張していけばいいだろ☆」

20200519go29.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 13路盤を横に並べると こんなに でかくなるんだが……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 サイズはあとで変えればいいでしょ」

KIFUWARABE_80x100x8_01_Futu.gif
「 とろろ盤 は 4分の1サイズのコーナーを 被せることになるが、できるのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 position 属性を使って水平移動させて、 z-order 属性で前景にするだけだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 とろろ画像を用意してくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Windows Paint で☆!?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 GIMP を使いなさい」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 GIMP で、グリッドに吸着って どうやるんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 並んでいるメニューを左から右へ、上から下へ、全部開けて 置いてあるボタンは全部押しなさい」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ……☆」

20200519go30.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここらへんにありそう……☆」

20200519go31.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 こんな感じに グリッドを作ろうと思うんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 コーナー・パーツは 小さく まとめられるんじゃないかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 仮組に本気を出してどうすんだぜ☆ きつきつに合わせてはいけないんだぜ☆
これで問題なければ このまま本番で使っちゃう、ぐらい気楽にやるのがいいんだぜ☆」

20200519go32.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ふーむ、こんな感じかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 白餅を描いてみましょう!」

20200519go33.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こんなもんでいいだろ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 高速の再提出マンわらう☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ゲームなら クロップして コピーすりゃいいんだが、HTMLだと どうすんだぜ……☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 フレームに ばらして 画像出力する機能がないか調べましょう!」

KIFUWARABE_80x100x8_01_Futu.gif
「 CSS に トリミング機能が付いているみたいだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 初聞きだぜ……☆ やってみるか☆」

20200519go34.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まず、ふつうに画像を置くと 全部表示されてしまうわけだぜ☆
これを トリミングできるだって☆?」

20200519go35a1.png

<img src="img/white-stone.png"
                style="object-fit: none; object-position:-40px 0px; width:40px; height:40px;">

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ へぇ……☆ これで いけるなら使うが、
画像メモリを食い尽くしたりしないだろうか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ブラウザに責任を押し付けて 楽しましょう!」

20200519go36.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ここで 行き詰った……、コーナーにカバーを置きたいんだが、
カバーがあるところだけ 置く というのは 座標指定の鬼 にならないといけないようだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 鬼になったら いいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 透明の 13路盤 を4枚、重ねることにするぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 クソHTMLねぇ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ひとまず 5重のとろろ盤 の一番の下の段の 変換器を書くかだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Java Script って 16進数 使えんの?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 調べなさい」

20200519go37a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この表を見ながら プログラムを書くか……☆」

20200519go38.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 くそっ☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで 用意周到に準備して こうなるの?」

KIFUWARABE_80x100x8_01_Futu.gif
「 デバッグ・ライトを☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 はーん☆ お父ん、 board配列の要素に / や、改行が入っているぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 取り除くか……☆」

20200519go38a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 よっしゃ……、あれ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 世界一周してるぜ☆」

20200519go38a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 境界チェックした☆(^~^)!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 餅が くっつくときって、 コーナーにカバーをかけるのではなく、1枚の正方形を被せればよくない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そのようだぜ☆ まるで 12路盤 があるかのような☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 再設計だな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 GIMP で選択範囲の中だけを180°回転させるのって どうやるんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 調べなさい」

20200519go39.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 アイコン押しまくったら出てきたが、ウィンドウ ・メニューにまとめてほしい☆
なんで こんな予想しないところに 予想しない欄が出てくるんだぜ☆!?」

KIFUWARABE_80x100x8_01_Futu.gif
「 GIMPに何も期待するなだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 分かったぜ、期待しないぜ☆」

20200520go40.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 4つのコーナーを集めた方が 絵も描きやすいだろう……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 フタの12路盤は どうやって作るんだぜ☆?」

20200520go41.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 12×12 の将棋盤が 乗ってると思ってくれだぜ☆」

20200520go41a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もし、正方形しかないのだったら、角は4つ調べなくても、右下の角1つを調べるだけでいいんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 しゃあ それで 大幅に開発を時短しましょう」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 今日は終わりな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 トの字型のつながりもあるだろ☆ お父んのやり方だと うまくいかないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 終われだぜ☆!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 右下と、その右隣のやつの左下の2つを見たらいいんじゃないか☆?
餅の穴が正方形になるのなら、2点チェックすれば☆」

2020-05-20(wed) 21:05 - (着目から 24:20 経過 - ) 翌04:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ぐったり☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 寝てればいいのに……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 24時間も かけるようなアルゴリズムじゃないけどな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 はい、集中! とろろ碁 を作るのよ!」

20200520go42.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ 今日の関心ごとだぜ☆
13×13 のテーブルが、 12x12 のテーブルに圧縮されるリクツだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 コンボリューション・ニューラル・ネットワーク (CNN; convolutional neural network) のようだ……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 口から 答えを漏らすなだぜ☆
数学では バスに何人乗ってきて、バスから何人出て行ったら、バスに残っているのは何人、みたいな 状況を 畳み込み(Convolution)と呼ばれる☆
例をお見せしよう☆」

20200520go42a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ コーナーの分布をプロットすると 上図右のようになることは ご理解いただけるだろうか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 例を見せるのはいいけど、このブログを読んでいる人は とろろ碁 ができたかどうか にしか関心が無いのよ?」

20200520go42a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ このように バスに乗ったり 降りたりして バスの乗車人数を数えろだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで みんな 1区間で降りるんだぜ☆? 稲刈り機みたいなバスだな……☆」

20200520go42a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 全部計算すると こうなるが、この数が どのような意味を持つか 考えてみろだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 Windows Paint なんか触ってるから 2時間ぐらいで作れそうなアルゴリズムに 24時間も かかるんじゃない?」

20200520go42a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば、コンボリュート1回するだけで、散歩ルートを考えた、ぐらいの意味と取ることもできるな☆
数の常として、どのような意味にも取れる☆
イメージというのは、腹が減っているときに パンが食べたいか、ラーメンが食べたいかぐらいの違いだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 さすが ディープ・ラーニングの隠れ層を目視しようとしたお父んだぜ☆ 要らない注釈が付いてくる☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 とろろ碁 ができたら起こしてね」

OKAZAKI_Yumemi_80x80x8_03_Zzz.gif
「 ……Zzz」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この記事の続きを読みたいボタンをクリックした300人は 本当は続きが読みたい300人なのではなくて、 できたら起こしてほしい300人なんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 冷めてんな……☆」

20200520go42a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こんな感じの2重ループを作れば いけそうだな☆」

20200520go43.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ コーナー数 はどうやって求めるんだぜ☆? もちろん数学的な解決を与えてくれるんだろ、if文連打で 16秒で終わらせるのではなく☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 少し考えてみようぜ☆」

OKAZAKI_Yumemi_80x80x8_03_Zzz.gif
「 ……Zzz とろろ碁をつくりなさい、……Zzz」

20200520go43a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ゴットフリート・ライプニッツ(1646/7/1 ~ 1716/11/14)なら このように考えるだろう☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 その降霊術みたいなやつ どうやってやるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うーん、視えないな、イメージを変えてみるかだぜ☆」

20200520go43a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 視えたっ☆!

KIFUWARABE_80x100x8_01_Futu.gif
「 視えたっ☆! こんなところにも コンボリューションがあるとは……☆」

20200520go44a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 言われてみれば 当たり前だよな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 コーディングするの めんどくさいんで、 if文 16回連打 しようぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 まあ、50回を超えると if文連打したくなくなるが、16回ぐらいならいいだろ……☆」

OKAZAKI_Yumemi_80x80x8_03_Zzz.gif
「 ……Zzz 数学的解決はどこに、……Zzz」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 いらっ☆!」

def corner_number_table():
    def corners_number(num):
        s = f'{num:04b}'
        print(f'bit {num} : {s}')
        sum = 0
        for i in range(len(s)-1):
            if s[i] == '1' and s[i+1] == '1':
                sum += 1
        if s[len(s)-1] == '1' and s[0] == '1':
            sum += 1
        return sum

    table = []
    for num in range(16):
        table.append(corners_number(num))

    return table


print(corner_number_table())

output:

bit 0 : 0000
bit 1 : 0001
bit 2 : 0010
bit 3 : 0011
bit 4 : 0100
bit 5 : 0101
bit 6 : 0110
bit 7 : 0111
bit 8 : 1000
bit 9 : 1001
bit 10 : 1010
bit 11 : 1011
bit 12 : 1100
bit 13 : 1101
bit 14 : 1110
bit 15 : 1111
[0, 0, 0, 1, 0, 0, 1, 2, 0, 1, 0, 2, 1, 2, 2, 4]

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ほらよ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 会社でこんなん書くと、引継ぎマニュアルを書くのがむずかしいやつだぜ☆
if文連打の方がありがたがられるだろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 アウトソーシングしろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あれっ、タイルの総コーナー数を求めたって嬉しくないぜ☆
左下にコーナーがあるか、とかを調べたいんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ANDマスクでいいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 もっと 簡単に作れたんじゃないのか☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Sticky rice cake 数……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 えっ☆? なんて☆? 何か言ったか☆? もっと大きな声で言えよ☆」

20200521go45.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うーん、なんか違う所指してるな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 餅数に 石の色が含まれていないからでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まず 石テーブルを、 黒石チャンネル と 白石チャンネル に分けるかだぜ☆」

20200521go46.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 黒石チャンネル から 餅成分 を取り出すと……☆ なんか 飛び餅 が消えてるぜ☆ なんでだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 8近傍に仲間がいないと 餅成分 は消滅するのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 めんどくさ……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 餅が None であることと、餅の周りに仲間が None であることを見分けられないかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 餅成分は そんな情報持たないんで☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それが 数の真実か……☆ ここは後回しとしよう☆」

20200521go46a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 周囲8近傍に仲間がいるのに 消えてるやつがいるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 直せ☆」

20200521go46a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 石の位置情報と、餅成分は 2つ一緒に使わないといけないな☆」

20200521go46a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 畳みこんでみたんだが、思ってるのと違うぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 見直せ☆」

0x8

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 0x08 としたかったところを、 0x8 と書いていたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 気を付けると直らなくなる☆ 忘れろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 記憶から忘却したぜ☆」

20200521go46a4b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 向かい合った石の数にしても、数が合わん……☆
特に baroque diagonal のとき1つ足らん☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ヒント☆ お父んは 左と右の区別が付かない☆」

20200521go46a5b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 右下チャンネル☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 すごいチャンネルだぜ☆」

20200521go46a6b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 左下チャンネル☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ローラー作戦か☆」

20200521go46a7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 右上チャンネル☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 消えたぜ☆」

20200521go46a8b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 左上チャンネル☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 右下チャンネルがあれば、左上チャンネルは要らなくないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 バグが取れるまで、二重チェックに使おうぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 バグを見つけたぜ☆」

20200521go47a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ Pythonの演算結合か……☆ 直して記憶から忘却しろだぜ☆」

20200521go48.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 直ったぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 4のところに フタ を置けばいいな☆」

20200521go49.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 餅カバー はできたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 次はケイマだな☆」

20200521go50a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 切れにくいと言っているヒモは マンハッタン距離2 だぜ☆
切れやすいと言っているヒモは マンハッタン距離3、チェビシェフ距離2 だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 わたしは思う☆ このルールを実直にすべてやると 網だらけになる☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 サンプル画像見ると、このヒモが付くべきところに、付いていない箇所があるぜ☆
このヒューリスティックな省略がツイッターで ウケ てるんだろ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 全部に 網を引くと 粘菌 みたいになるしな☆」

20200521go51a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 黒石だけ見ても、上図の赤線のケイマは 省かれているぜ☆
この線が なぜ省かれたか 全て説明できれば アルゴリズムの確立に前進するぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 まず1つ目、ループバックはしない☆ つまり 自分とはつながらない☆
だが何より重要なのは こいつらは テリトリーの境界線の役割をしているということだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 だったら ネットワークではないわけか☆ ボーダー☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 黒と白のヒモは クロスもしないと思うぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この形の ボーダーを引くアルゴリズムは 簡単だな……☆」

20200521go52.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ インターセクションを見て、Z字のテトリスブロックみたいに 2つ飛んでるパターンのところがケイマだぜ☆
どちらにしろ 2マス重なったところは壁と見ていい☆ その内側がテリトリーだぜ☆
そこらへんの接続部は あやふやに 薄めるのがテクニックだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 今日はここまでだぜ☆」

2020-05-21(thu) 17:45 - (着目から 31:05 経過 - ) 24:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 すごい疲労……☆ 今日は3時間ぐらいで切り上げるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 とりあえず ケイマの紐 のケースを洗い出そうぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 むずかしいのは どこを引くか ではなくて、どこを省くか なんだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父ん 一人で 続けてしゃべんな☆」

20200521go53a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ このようなケースはどうするのだろう☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どうすることもできないのよ! しろうとが集まって 雰囲気で さわいでいるだけなんだから!
パソコンの中に おっちゃんを入れて 省かせましょう!」

KIFUWARABE_80x100x8_01_Futu.gif
「 その おっちゃんが、ユーザーの感情にあった ヒューリスティック・プランニング をしてくれるだろうか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 してくれるわけないのよ! 何も考えてないんだから!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ディープ・ラーニングの使いどころだが、おっちゃんが選んだケイマの紐 厳選10万局面 みたいな教師データがないと
むずかしいよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 また ライプニッツを降霊してくれだぜ☆」

20200521go53a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ルネ・デカルト(1596/3/31 - 1650/2/11) 問題は それを解くのに適切かつ必要なところまで分割しなさい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 チェンジよ チェンジ!」

20200521go53a3b2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 寺田寅彦(1878/11/28 - 1935/12/31) 全体が実物っぽく見えるためには、部分を実物とちょっと違うように描かなければならない☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 うーむ☆ 何を言ってるか分からんな☆ 次へ☆」

20200521go53a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プラトン(BC 428? - BC 348?) イデア(内面) エイドス(外観) モルフォ(形) パラデグマ(パターン) ジェノス(属性) ロゴス(本質) エイキン(想像力)☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 だんだん 離れてきたわよ!」

20200521go53a5b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 1736年頃 レオンハルト・オイラーに一人の者が尋ねた☆ ケーニヒスベルクのブレゲル河にかかっている
7つの橋を1つずつ通る散歩のルートはあるか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 そのあと戦争で爆破されたり 付け替えられたりして 今はその橋、2本しか残ってないらしいぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 テリトリーを先に求めて、その上にあるケイマの紐は 省いた方が早くない?」

KIFUWARABE_80x100x8_01_Futu.gif
「 テリトリーは どうやって求めるんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 囲碁の死活を計算した地ではなくて、単に囲まれたスペースを求めるだけなら
コンパスと定規だけでできる中学生ぐらいの問題だぜ☆」

20200521go54a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしは 囲碁ウォーズ36級なんで、適当に石を置くぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 もっとマシなサンプルは無いのか……☆」

20200521go54a2b1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 これぐらいじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 多分、テリトリーは 自分で算出せずに GNUGo に算出させた方がいいと思うんだぜ☆」

20200521go54a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 簡易計算したいなら、レイ (Ray) を飛ばす という方法があるぜ☆
空きマスから見て 上下左右の石の色が揃っていれば、その色のテリトリーだぜ☆
黒白どちらも見えれば ダメ と判定すればいい☆」

20200521go54a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 すると だいぶ 人が思っている感覚から外れてしまうが、それが近似というものだぜ☆
近似であるならば、精度を上げていけだぜ☆ 例えば ナナメにもレイを飛ばせだぜ☆」

20200521go54a4b1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 大惨事オセロだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ブログが重くなってきたので次の記事へ☆」

<記事その2へ>

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事