2020-08-08に更新

将棋の囲いの数学的定義<その1>☆(^~^) The quantifying the King's escort at the opening of Shogi<No.1>:)

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

20200802shogi96.gif

(『半自動 囲いっぽさ 計算機』 ソースコード: Git hub )

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 暗記で覚えている人の知らない 将棋の囲いの理(ことわり)を教えてやろう☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父ん 将棋 アマ5級なのに……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 寝てればいいのに!」

将棋の囲い一覧

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 囲いの一覧は カンニングしようぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 計算式の論拠は デモンストレーションのあとで解説する☆」

Demonstoration

0点

20200806kakoi167.png

20200806kakoi174.png

1点 (レベル0)

20200803kakoi133.png

20200806kakoi166.png

3点 (レベル1)

20200803kakoi127.png

20200806kakoi175.png

20200806kakoi183.png

4点 (レベル1)

20200806kakoi168.png

4点 (レベル2)

20200803kakoi115.png

20200803kakoi129.png

20200803kakoi139.png

20200803kakoi114.png

20200803kakoi113.png

20200806kakoi172.png

20200806kakoi177.png

20200806kakoi182.png

5点 (レベル1)

20200803kakoi140.png

20200806kakoi184.png

20200806kakoi187.png

20200806kakoi189.png

20200806kakoi190.png

6点 (レベル1)

20200803kakoi134.png

20200806kakoi188.png

20200806kakoi185.png

6点 (レベル2)

20200803kakoi141.png

20200803kakoi142.png

20200803kakoi143.png

20200806kakoi165.png

7点 (レベル1)

20200803kakoi128.png

20200806kakoi186.png

7点 (レベル2)

20200803kakoi144.png

20200803kakoi123.png

20200803kakoi137.png

20200803kakoi116.png

20200803kakoi125.png

20200803kakoi135.png

20200803kakoi136.png

20200803kakoi121.png

20200803kakoi122.png

20200806kakoi179.png

8点 (レベル2)

20200803kakoi118.png

20200803kakoi145.png

20200803kakoi146.png

20200803kakoi148.png

20200803kakoi149.png

20200806kakoi176.png

20200803kakoi130.png

20200803kakoi112.png

20200803kakoi120.png

20200803kakoi132.png

20200803kakoi111a1.png

20200806kakoi162.png

  • ↑ その他(アヒル囲い) 8点 - Sonota (Duck swim fence) 8 pts.
  • 8 / 4 = 2
  • 17上形

20200806kakoi169.png

9点 (レベル2)

20200803kakoi124.png

20200803kakoi151.png

10点 (レベル2)

20200806kakoi171.png

20200806kakoi170.png

11点 (レベル2)

20200806kakoi180.png

20200803kakoi119.png

20200806kakoi173.png

12点 (レベル3)

20200803kakoi117.png

20200806kakoi163.png

  • ↑ その他(エルモ囲い) 12点 - elmo's fence 12 pts.
  • 12 / 4 = 3
  • 65左形

20200806kakoi178a1.png

20200806kakoi181.png

Old text

20200729kakoi3a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ とりあえず 囲い の定義を、 将棋マンとしてではなく、プログラムマンとしての見方で 説明する☆
つまり、 固いとか 長所とかではなく、 囲いと認識するのは何故か? について話す☆
例えば 金無双 で説明しよう☆」

20200729kakoi3a2b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.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
「 金の延べ棒 とか序盤で作れないやつを除けば、計算量はかなり減るぜ☆
2枚の囲い3枚の囲い に限定すれば 現実的だろう☆」

20200729kakoi4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 定義上、 囲いに見えない ケースも出てくるが、 囲いっぽさ が低い囲いだぜ☆
つまり、 囲いっぽさが高い囲い のことを将棋マンは 囲い と呼んでいる☆
囲いっぽさ の点数の付け方を説明しよう☆ 上の図は 3点☆」

20200729kakoi5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 上図で、 玉を除き、囲いの構成要素で、 お互いに紐づいているところは 4点
一方通行の紐づきがあれば、 2点、 紐づいていないところは 1点 だぜ☆
金無双は 囲いっぽさ 5点 ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 1 と 2 と 4 は どこから出てきたの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 紐の出元と行き先で駒2枚だから2点☆ 双方向なら4点☆ 紐がなければ出元の駒が1枚なので1点☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 紐を点数化してんのね」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ、有名所の囲いを 点数化してくれだぜ☆」

20200729kakoi8a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 総矢倉は 8点
駒から伸びる紐は 迷路は 閉路を描かない……、つまり輪っかを作らないものとするぜ☆ 」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで 閉路は点数にしないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 単に 計算が 複雑だから 省くんだぜ☆
計算が簡単でない計算式は 親しまれない☆」

20200729kakoi9.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ じゃあ 金矢倉は 6点 か☆」

20200729kakoi5a1.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 金無双は 銀が下にいた方が 囲いっぽさが 6点 で高くない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 強いかどうかは置いておいて、囲いっぽいよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 偽陽性の反例を見てみようぜ☆?」

20200729kakoi10a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 天空ダイヤモンド美濃 は 囲いっぽさが 12点 だが、これは囲いなのか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 強いか弱いかは置いておいて、囲いなのではないかな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 玉が囲まれてなくない?」

KIFUWARABE_80x100x8_01_Futu.gif
「 では 逆の見方をしよう☆ 0点~12点の 囲いっぽいものを 例示していこうぜ☆?」

20200729kakoi11.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 0点 ☆ 裸玉だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 裸玉は 味方の駒が盤上にいなくて 玉1枚 という意味だが、まあ 裸感あるよな☆」

20200729kakoi12.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 1点☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 頼んないわねぇ」

20200729kakoi13.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 2点☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 駒はくっついてた方がいいよな☆!」

20200729kakoi14a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 3点☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 無いよりはマシぐらいねぇ」

20200729kakoi15a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 片美濃は 4点☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ここからは囲いっぽくなるわねぇ」

20200729kakoi16a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 木村美濃も 4点 だな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 位置関係で 名前が変わるの大変ねぇ」

20200729kakoi15a2.png

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んの定義では 片美濃と ちょんまげ美濃 を区別できないが、どうするのか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 あとで考えようぜ☆?」

20200729kakoi17a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 船囲いで銀が1枚働きに出て行ってるやつ 5点☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 船囲いを 囲い っていうやつ 変わってるよな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 あんたの定義は 囲い って言ってんのよ!」

20200729kakoi18a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 最強囲いは 6点☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ 無敵囲い も 6点 だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 弱いのに 囲いっぽく見える囲いって あるのよねぇ」

20200729kakoi19a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 美濃囲いは 7点☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ガチ勢の囲いだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 片側に集めてる方が 駒効率がいいんじゃない?」

20200729kakoi8a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ さっき出た 総矢倉は 8点☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 駒4枚使ってるわりに 囲いっぽさが低いよな☆」

20200729kakoi20a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ アヒル囲いも 総矢倉と同じ 8点☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わらう☆」

20200729kakoi22a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 雁木囲いは 9点☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 4枚使わないと 9点以上にならないな☆」

20200729kakoi21a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 数え方によるが、 四枚美濃 は 9点 にも 10点 にもなるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 将棋の慣習で、良いとこ取りで 10点で☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 悪いとこ取りしたら 1点 よね、それ」

20200729kakoi23a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 11点 の囲いは見つからなかったが、例えば こんな形だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わざわざ こんな形にするメリットが無いのかもしれないな☆」

20200729kakoi24a1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ エルモ囲い は 12点 だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 こんな感じで、存在しうる全ての 囲いっぽい ものは プログラムの for文 ですぐに出せるだろうな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 スタート地点と 方向と、良いとこ取りがあるから もっと手間がかかるわよ」

お絵描きの自動化

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 へーっ、つら☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そのお絵描き、自動化できないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 できるだろ☆」

20200731kakoi37.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 盤上に1個しかない玉をスキャンし、スタート地点にしろだぜ☆ 最初の カレント だぜ☆」

20200731kakoi38.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ その次は 現在位置の8方向を調べろだぜ☆」

20200731kakoi39.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そこに金か銀があれば、そこにカレントを移動して、既に調べたマスを除く、8方向を調べろだぜ☆」

20200731kakoi40.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ あとは 再帰囲いの構成要素 は すべて見つかるな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ 点数を最大化する 経路 は どうやって選ぶんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 最初は 玉をスタート地点にしたが、見つけた 囲いの構成要素 の金、銀をスタート地点にして それぞれ隣だけ探索しろだぜ☆」

20200731kakoi41a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ すると 成分 が取れるだろ☆」

20200731kakoi41a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そしたら 成分 を 総和 しろだぜ☆ これで作れたものを 有向グラフ と呼ぶ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 有向グラフ が作れれば、あとは どうとでも調理できるわね」

20200731kakoi41a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 囲いの構成要素 の金、銀 をスタート地点にして、 閉路 ……、つまり 輪っか を描かないように 描ける をすべて 洗い出せ だぜ☆
この線は いわゆる 経路 だぜ☆」

20200731kakoi41a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 洗い出すと、 お前はわたしの部分 みたいなやつがでてくることがあるから……☆」

20200731kakoi41a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そいつらを消せだぜ☆ つまり 包含(ほうがん;Implication) してるやつを消した☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 こういうの お巡りさん が得意よね。 棚から 落とし物届け出書 が 一瞬で出てくるのよ。
何分に落としましたか?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 士のつく職業や SPI やってるやつ、 Mensa とかは こんなブログ読まなくていい……☆
このブログは もっと ほのぼの してるんで……☆」

20200731kakoi41a6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ひとふでがきオイラー路Eulerian trail) が完成しているやつは、点数が高い方を選べばいい☆
点数が同じなら どっちでも同じだが、
どっちでもいいときの どれを選ぶかは 囲いの数学的定義 を揺るがすものではないので、ここでは定義しないものとする☆」

20200731kakoi41a7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ひとふでがき が出てこないこともあるだろう☆」

20200731kakoi42.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そういうときは、 1回目に確定した 囲いの構成要素 から 再探索しろだぜ☆」

  • 0回目 - 8八玉
  • 1回目 - 7八金 7七銀 6七金 5六銀

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これを繰り返すと いずれ プレイアウト(満局) が完成するので 点数が分かるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 めんどくせ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 このように 洗い出された 問題のありえる状態 を 塗りつぶしていくことを 動的計画法 (Dynamic Programming; DP) という☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 なんで こんな単純な話に ダイナミック・プログラミング みたいな すごそうな名前が付いているかというと、
アメリカの研究所が 国から予算を取るときに 名前に ダイナミック と付いていると 予算を取りやすかったからという話しは 何度も書いた☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 人に受け入れられやすいのは重要なのよ。
結局 ミーム性、バイラル性 が勝つのよねぇ。
すると 最初は 面白い面白い と思われて 流行るんだけど、燃料はそのうち尽きるのよ。
クリエイターが ミーム性、バイラル性 のないところを掘り続けることを諦めたら、ぽっと出の ど素人 が原液提供して 面白さに 負けるのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ウケのいいことを否定する理由は それが上手く行っている間は 見つからないからな☆
売れることと と 人気が出ること と 興味深いこと の3つを区別できないやつが ライフハックに手を出してしまう☆
最初は 上手く行きそうに見えるんだが、上手く行っているか行っていないかは ゴールにたどり着くかどうかとは 関係ない☆
足りないピースを見つけることこそが 真実だぜ☆
真実は 自分がまだ持っていない 興味深いこと の中にある☆ ミームは言ってしまえば足りている……☆
ミームも バイラルも 目、耳から シャットダウンだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 早よ自動化しろだぜ☆」

20200731kakoi43.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ その前に 定番の 自然数を並べろ だぜ☆
むしろ 並んでいるものは自然数だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ワケの分からないこと言ってないで 早よ始めろだぜ☆」

20200731kakoi44a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 全ての矢印は 数で特定できる☆」

20200731kakoi44a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 矢印に 原理的に 一意の名前を付けることができたな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 苦し紛れわらう☆」

20200731kakoi45.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これだけ 画像素材を作ればいいのかだぜ☆ 17 だと どんな長方形にしても 1 はみ出るな……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 空マスも 欲しくないかだぜ☆?」

20200731kakoi45a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 他に無いかだぜ☆? なければ 締め切るが……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 王さんから伸びてる 8方向の グレーの矢印が要るんじゃない?」

20200731kakoi45a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 疲労……☆」

20200731kakoi47.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ つら……☆」

20200731kakoi48.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 今日は ここまで……☆」

2020-08-01(sat) 7:30

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何の成果も出さず 8月 に変わってるのを見て、いつものことだと思えるぐらい
戦いへの覇気を失った おっさん は、今日も一日 ぼんやり と すごすぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 手を動かせだぜ☆ 口は何も生産せん☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 9時までには 動くものが作れるレベルの プログラムなんじゃないの?」

20200801kakoi49.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 頭が ぼんやり してるんで 座標をメモっておこうぜ☆ CSSの設計者の意図が分けわからんが、座標は マイナスになる☆」

    <img src="img/mapchip.png" style="object-fit: none; object-position:-64px -0px; width:64px; height:64px;"><br>

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 例えば こんな風に書けば 上向きの矢印を Crop(クロップ;切り抜き) できるぜ☆」

20200801kakoi50.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 開発環境は こんな感じだぜ☆
画像を描くのを楽したいだけなんで、HTMLタグのベタ張りで画像を並べて、スクリーンショットを獲れればいい☆
ソフトウェアを作ろうとはしていない☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 将棋盤の罫線が太いな……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 調整は あとで☆!」

20200801kakoi51.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 盤の上に 物置くのも 座標の調整でやるんだぜ☆
ただ 今回は 駒も背景扱いにして、上に矢印を置きたいんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 矢印はナナメの位置にあるのよね」

20200801kakoi52.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 正確には、矢印は ヨコ、タテ、ナナメ の位置にある☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 しかし 10歳のプログラマーが 元素をゲーム感覚で覚えられるプログラムを作ってんのに なんで 40過ぎの おっさん が スタイルシートいじって
お絵描きしてるんだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父ん、手を動かす☆」

20200801kakoi53.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ めんどくせ☆ 4行の Python で将棋盤作る……☆」

20200801kakoi54.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ コピー貼り付けして 属性のセットは JavaScript で済ます……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 最初から そうすれば いいのに……☆」

09:05

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 もう 9時になったんだけど まだ できてないの?」

20200801kakoi55.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 将棋の符号を入れれば 並ぶと思うんだが、 わたしは 将棋の符号とか すぐに出てこないんで☆
香は 9の9 かだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父ん、頭を動かす☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 動かしてる☆!」

20200801kakoi56.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ タテとか 座標どこなんだぜ……☆ トライ&エラーしか☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 できてる、できてる! グラフィックの配色を 調整しましょう!」

20200801kakoi57.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ わたしの色彩能力では 色を薄くするぐらいしか……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 それでも 自主制作ゲーム勢か☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 駒の枠線に 主張は要らないんじゃないの?」

20200801kakoi57a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これで どうか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 思ったんだが、画像が大きいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 今さら そんなん 言われても……☆」

20200801kakoi57a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 確かに 50% でも十分だな……☆」

20200801kakoi58.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 縮小は Webブラウザーの機能でやってしまおう☆ プロダクトではないんで☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 点数表示まで 自動化できないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 工数が……☆」

20200801kakoi59a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 お絵描き めんどくせーっ☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 Godot で こういう メニュー画面を作ったらいいんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それも めんどくせーっ☆!」

20200801kakoi60.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ モデル&ビュー構造にしたんで、データを切り出せたが……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 盤と矢印も 分けろだぜ☆」

20200801kakoi61.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2020年現在 最高難度にしてWebフロントエンドの激戦区のプログラム言語 Java Script の表現力を持ってすれば
1つのデータ構造でいけるな☆」

20200801kakoi61a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まずは ベタ打ち で作ってみて、あとで それを変数に置き換えていくのは
モデル&ビュー を使った 定番の画面の作り方だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 できてるのでは☆?」

20200801kakoi61a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ プログラムから 値のハードコーディングを取り除き、代わりに id="" というのを振っているな☆
値がないのになんで表示できるかと言うと……☆」

20200801kakoi61a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ id を使って検索して、そこに値をセットする、という手順を踏んでいるからだぜ☆
これを ビューと モデルの 分離という☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 モデルも JSON化 してしまえだぜ☆」

20200801kakoi62.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ はい JSON化した☆
営業の人とか JSON とか言われても分からんので JSON 禁止の職場もある☆
会社を辞める心の準備が整うよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 お父んは 豆腐メンタル だからな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 将棋盤でかくない? 切り取れないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 CSS にそんな機能あるかだぜ☆? 調べてみるか……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 画像のトリミングは出てくるが、 div エレメントのトリミングなんか出てこないな……☆」

20200801kakoi63.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 iframe を使うと楽かと思ったんだが、スクロールバーを消すとスクロールできない……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 JavaScript でスクロールバーを非表示にしながらスクロールできないのかだぜ☆?」

20200801kakoi64.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ そうか、アンカーを使えばどうか☆」

20200801kakoi65.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 行単位の精度は出るが、列単位の精度が出ないぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんとかならんのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 外側のページから、内側のページを操作しようとすると、クロスサイト・スクリプティング なんで
弾かれるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 内側で勝手にスクロールしなさいよ」

20200801kakoi66.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 数値を うまく合わせれば いけそうだな☆」

20200801kakoi67.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 枠に 8px あって うまくいかないが 見逃せだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 計算結果が消えてるだろ☆ 直せだぜ☆!」

20200801kakoi68.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ インナーフレームにボードを、外側に 計算結果を置いて、
データは JSON ファイルにするのがベストなんだが Webに置いて URLでアクセスするのめんどくさいので
JSファイルに関数にして入れておくぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 何囲い、というやつ 上に置きなさい」

20200801kakoi69.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ つら……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 よし、自動化でけたな☆ 使ってみようぜ☆?」

20200801kakoi70.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 半自動化でけたな☆ ナナメの符号が分けわからんが……☆」

20200801kakoi70a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ あっ、矢印の種類が違うぜ☆ 人力入力によるミスは 目視確認でないと 見つからない……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 そこを 自動化できないのかだぜ☆? 矢印は自動で置けるだろ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ごもっとも、しかし工数……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 プログラムが計算してこその、プログラミングでしょ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 工数……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 まさか、人力で 画像を生成しようとは 思っていないような☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 JavaScript ファイルを新たに用意するか……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 やる気になったか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 前に書いたアルゴリズムは 実装に手間がかかってしまう☆ もっと簡単な実装を考えてみようぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 木の全状態を洗い出して、点数が1番高いやつを選ぶだけでいいのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 木の全状態を どうやって作るかだよな☆」

20200801kakoi74.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まず、玉からスタートするのは確定だぜ☆」

20200801kakoi74a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 分岐するんだが、これが 再帰 だけで表現できないぜ☆
恐らく 棋譜を残しておいて、まだ作っていない棋譜が作れる限り プレイアウトを繰り返す、という作りだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 それでいけるのでは☆?」

20200801kakoi74a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 同じパターンを2度 繰り返さない 仕掛けが必要だぜ☆
すべて散らばる というのは 統計学ではありえない☆ 暗号とか、乱数の世界だぜ☆ むずかしい☆」

20200801kakoi74a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 枝の1本1本は ただの 再帰 なんだが☆」

20200801kakoi74a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ほんとに これで 全部だろうか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 マスではなく、線に色を付けた方が 見やすいのでは☆?」

20200801kakoi74a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なるほど……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 深さ優先探索をしたのね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 サイコロ振るのを止めて、全ての選択肢をプレイアウトすればいいわけかだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 見えてきたか☆!」

20200801kakoi75a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 開発に入る前に カンニング・ペーパーを作っておこう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 手を抜くための 用意周到さ は なんなのよ!」

20200801kakoi76a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ こういう 局面評価値 の算出は 葉ノードでやるより、探索中に 枝1本ずつ 加算していった方がいいのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 そりゃ そうでしょうねぇ」

KIFUWARABE_80x100x8_01_Futu.gif
「 また お絵描きして……☆ 自動化の途中なのに……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 木構造で 後ろ向きに戻ってくるときは 情報を捨てるもんなんだが、
枝の情報をキープしながら 戻ってきたり、あるときは 枝の情報を捨てたり という
切替の判定方法が分からん……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 くわしく☆」

20200801kakoi77.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 上図の1番では、途中で、後ろ向きに戻るのではなく、後ろ向きに進んでいるところがあるんだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 棋譜を暗記するしか なくない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 矢印をどうやって覚えるかな☆」

function get_data() {
    return {
        "enclosureName": [
            "左美濃囲い", "天守閣美濃", "Hidari Mino Gakoi", "Tensyukaku Mino"
        ],
        "board": [
            [96, "pc_0"],
            [86, "pc_0"],
            [76, "pc_0"],
            [56, "pc_0"],

            [87, "pc_k"],
            [67, "pc_0"],

            [88, "pc_0"],
            [78, "pc_s"],
            [58, "pc_g"],

            [99, "pc_0"],
            [89, "pc_0"],
            [69, "pc_g"]
        ],
        "arrow": [
            ["d87", "k48"],
            ["d78", "a4884"],
            ["d68", "a62"],
            ["c58", "a1"]
        ]
    };
}

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ k48 なら ナナメ だから、 d は自動的に決まるな☆ 自動で決まるものは省こうぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 というか、その arrow は 全自動で計算するから要らんという話しだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 矢印の座標が むずかしい……☆」

20200801kakoi78a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 矢印は、ドロップ・シャドウ のように置くことにするぜ☆
つまり だいたい 右下に置かれると想像して 符号を指定しろだぜ☆」

21:28

20200801kakoi79.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ もっと のんびり解説したかったんだが、夜の21時を回ったので 解説なしの問答無用でコーディングした☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 最初から そうすりゃいいのに……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 他の囲いを入力してみましょう!」

20200801kakoi80.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ テストだな☆ 自動で一番いい点数を本当に付けているのか、頭で確認だぜ☆」

20200801kakoi81.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ バグった……☆ 銀が横に進むし……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 まず 銀が横に進まないようにしようぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 銀が横に進むようには書いてない……☆」

20200801kakoi82.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ バグが出るケースを たくさん集めて共通点を探そうぜ☆?」

20200801kakoi83.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ひとふでがき なら大丈夫とか☆?」

20200801kakoi84.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 中住まいで、なんて玉の右隣の銀に 線が引かれないのか……☆?」

20200801kakoi85a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ カンマのミスでもエラーにならないのか……☆」

20200801kakoi84a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 中住まいは直ったぜ☆」

20200801kakoi86.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 分岐できていない原因を調べるのは 大変だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 探索部をアニメーションできないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 時間が足りないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 JavaScript で、再帰処理の中で使える スリープ が無い気がするぜ☆
async/await 使うか……☆」

20200801kakoi87.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ アニメーション機能を 充実させると デバッグに良さげだな……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 でしょ?!」

20200801kakoi88.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ アニメで見ると 全ての分岐を通ってるんだが、最後の結果は分岐を消してしまうみたいだな☆
どうやって 分岐を保持するか……☆」

2020-08-02(sun) 7:30

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 全分岐で プレイアウトしなくちゃいけないのに、
普段の勘で サーチをしてしまう……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 同じ手を指さないプレイアウトを できなくなるまで やればいいのよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 プログラムに疲れたんで、数学ブログやる☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 また サボって……☆」

18:51

20200801kakoi89.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 楽しくプログラミング解説している余裕なく 5時間ぐらい プログラム練り直して コーディングして とりあえず
これぐらいの複雑さなら 半自動計算してくれるところまで でけたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ ミレニアム囲い にリベンジできるか やってみようぜ☆?」

20200801kakoi90.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まだダメか……☆」

20200801kakoi92.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ カニ囲いは、王さまと 金が 同じ銀 指してるのが ダメだぜ☆
そうか、葉 に 塗りつぶし済みチェック が入ってないのか☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 直そうぜ☆?」

20200801kakoi92a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ループ中に 内部状態が変わっているのに気づいてなかったんで ループの中に2つ目のチェックを入れたぜ☆
カニ囲いは、直った☆」

20200801kakoi90a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ミレニアム囲いは まだ間違ってるぜ☆
チェックを入れたんだが 他に もっといい経路があるのに探さずに終わってしまったぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 塗りつぶしボードをクリアーするのを忘れているんじゃないかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ダメだぜ☆ 同一棋譜チェックをしているんだが、前半部分一致で 多くの状態を弾かれてしまう☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 同一棋譜のチェックを止めればいいのよ。
モンテカルロ木探索と違って 全幅探索なのだから、同じ棋譜なんか 探索しないわよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それもそうか……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そうしてみたら 同じ経路のプレイアウトを 繰り返し始めたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ダイナミック・プログラミングで 先に 全ての状態のあり方 を洗い出した方が 良かったのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ ランダムのプレイアウトで 数の力で押した方がマシか……☆」

20200801kakoi90a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 モンテカルロ木探索よりむずかしいなら、モンテカルロ木探索にすれば 良かったのか……☆
UCB1 も要らね、 ただの ランダム木探索 で十分……☆」

20200801kakoi95.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この入力部、もっと簡単にならんの☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 9列、9行の文字列の配列にするかだぜ☆?」

20200801kakoi95a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 変更してみたぜ☆ ドッグ・フーディングしてみようぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 犬が どうかしたのかだぜ☆?」

2020-08-03(mon)

20200803kakoi111.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ルビの Furigana の位置が気にならないかだぜ☆!?」

KIFUWARABE_80x100x8_01_Futu.gif
「 余裕が出てきたな☆」

20200803kakoi111a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これぐらい やるべきでは☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 入力が めんどくさそう……」

次の記事へ

何度でもクリック!→

むずでょ

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

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

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

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

ボードとは?

むずでょ の最近の記事