Suche senden
Hochladen
C++用将棋ライブラリ"OpenShogiLib"の紹介
•
Als PPTX, PDF herunterladen
•
2 gefällt mir
•
5,032 views
Hiro H.
Folgen
2013.7.13 CLR/H & Sapporo.cpp 勉強会で発表
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 65
Jetzt herunterladen
Empfohlen
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Hiro H.
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会
t-moritsugu
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
Hiro H.
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
プロ生ちゃんbotを作ろう!
プロ生ちゃんbotを作ろう!
treby
Empfohlen
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Hiro H.
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
2017 0721 サーバレスアーキテクチャを勉強する会
2017 0721 サーバレスアーキテクチャを勉強する会
t-moritsugu
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
2012.11.17 CLR/H&札幌C++勉強会 発表資料「部分文字列の取得を効率よく!楽に! - fundoshi.hppの紹介と今後の予定 -」
Hiro H.
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
Hiro H.
プロ生ちゃんbotを作ろう!
プロ生ちゃんbotを作ろう!
treby
Hubotで遊ぶ
Hubotで遊ぶ
treby
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
Hiro H.
Hubotをはじめる
Hubotをはじめる
nasa9084
Sapporocpp#2 exception-primer
Sapporocpp#2 exception-primer
Kohsuke Yuasa
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
Hiro H.
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
Hiro H.
C++ template-primer
C++ template-primer
Kohsuke Yuasa
最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5
Kohsuke Yuasa
Introduction to boost test
Introduction to boost test
Kohsuke Yuasa
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
Kohki Miki
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Hiro H.
オーディオ用レベルメータを作ってみよう
オーディオ用レベルメータを作ってみよう
Kohsuke Yuasa
Study3 boost
Study3 boost
Kohsuke Yuasa
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
Hiro H.
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Hiro H.
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
Hiro H.
フォロワーから友利奈緒を探す
フォロワーから友利奈緒を探す
jz5 MATSUE
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
oFの話題が殆ど出ない oF jp Summer Workout
oFの話題が殆ど出ない oF jp Summer Workout
Tsuubito Ishii
Weitere ähnliche Inhalte
Andere mochten auch
Hubotで遊ぶ
Hubotで遊ぶ
treby
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
Hiro H.
Hubotをはじめる
Hubotをはじめる
nasa9084
Sapporocpp#2 exception-primer
Sapporocpp#2 exception-primer
Kohsuke Yuasa
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
Hiro H.
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
Hiro H.
C++ template-primer
C++ template-primer
Kohsuke Yuasa
最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5
Kohsuke Yuasa
Introduction to boost test
Introduction to boost test
Kohsuke Yuasa
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
Kohki Miki
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
Hiro H.
オーディオ用レベルメータを作ってみよう
オーディオ用レベルメータを作ってみよう
Kohsuke Yuasa
Study3 boost
Study3 boost
Kohsuke Yuasa
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
Hiro H.
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Hiro H.
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
Hiro H.
フォロワーから友利奈緒を探す
フォロワーから友利奈緒を探す
jz5 MATSUE
Andere mochten auch
(20)
Hubotで遊ぶ
Hubotで遊ぶ
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
2011.7.2 Ruby勉強会@札幌 「はじめてのRubygemsへのライブラリ公開」
Hubotをはじめる
Hubotをはじめる
Sapporocpp#2 exception-primer
Sapporocpp#2 exception-primer
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
C++ template-primer
C++ template-primer
最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5
Introduction to boost test
Introduction to boost test
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
〜ゲーム制作を始めてみよう〜 Kawaz入会希望者向けスライド
rsyncで差分バックアップしようぜ!
rsyncで差分バックアップしようぜ!
オーディオ用レベルメータを作ってみよう
オーディオ用レベルメータを作ってみよう
Study3 boost
Study3 boost
名古屋市営地下鉄最小距離完乗
名古屋市営地下鉄最小距離完乗
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
2011.6.4 TDD bootcamp 札幌2.0 自己紹介LT
フォロワーから友利奈緒を探す
フォロワーから友利奈緒を探す
Ähnlich wie C++用将棋ライブラリ"OpenShogiLib"の紹介
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
oFの話題が殆ど出ない oF jp Summer Workout
oFの話題が殆ど出ない oF jp Summer Workout
Tsuubito Ishii
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
Hiro H.
クソアプリ作った
クソアプリ作った
Yoshiaki Kitamura
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
Kazuhiro Serizawa
HiroshimaR5_Intro
HiroshimaR5_Intro
SAKAUE, Tatsuya
♡PHPが恋しい話♡
♡PHPが恋しい話♡
Shinichi Takahashi
すごい Hiroshima で楽しく学ぼう
すごい Hiroshima で楽しく学ぼう
Tomohiko Himura
aozorahack hackathon #1
aozorahack hackathon #1
masayoshi takahashi
Ähnlich wie C++用将棋ライブラリ"OpenShogiLib"の紹介
(9)
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
oFの話題が殆ど出ない oF jp Summer Workout
oFの話題が殆ど出ない oF jp Summer Workout
C++のライブラリを簡単に眺めてみよう
C++のライブラリを簡単に眺めてみよう
クソアプリ作った
クソアプリ作った
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
HiroshimaR5_Intro
HiroshimaR5_Intro
♡PHPが恋しい話♡
♡PHPが恋しい話♡
すごい Hiroshima で楽しく学ぼう
すごい Hiroshima で楽しく学ぼう
aozorahack hackathon #1
aozorahack hackathon #1
Mehr von Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
Hiro H.
式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
Hiro H.
PCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよ
Hiro H.
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
Hiro H.
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
Hiro H.
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
MSYS2使いはじめました
MSYS2使いはじめました
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
Hiro H.
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
Mehr von Hiro H.
(18)
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
式を書くだけで最適化計算してほしい!~CVXPY編~
式を書くだけで最適化計算してほしい!~CVXPY編~
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
PCSじゃないよ、PCAだよ
PCSじゃないよ、PCAだよ
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
スマホ音楽ゲームの動画から譜面をデータ化したかった
スマホ音楽ゲームの動画から譜面をデータ化したかった
シンデレラガールズ声優の増え方まとめ
シンデレラガールズ声優の増え方まとめ
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
最近デレステ創作譜面作ってるので技術的な見地から話します
最近デレステ創作譜面作ってるので技術的な見地から話します
デレステの劇場で登場したアイドルの回数の統計取ってます
デレステの劇場で登場したアイドルの回数の統計取ってます
MSYS2使いはじめました
MSYS2使いはじめました
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Kürzlich hochgeladen
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
Kürzlich hochgeladen
(8)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
C++用将棋ライブラリ"OpenShogiLib"の紹介
1.
C++用将棋ライブラリ "OpenShogiLib"の紹介 H.Hiro (Sapporo.cpp) http://hhiro.net/about/ Twitter: @h_hiro_ 2013.7.13
CLR/H & Sapporo.cpp 勉強会
2.
自己紹介
3.
H.Hiro • 大学院生 • 現在は就活と研究が 同時並行なので忙しめです •
こんなアイコン 使ってます→
4.
H.Hiro • Sapporo.cpp • Ruby札幌 •
数学勉強会@札幌 : いろいろやってます
5.
部分文字列の取得を 効率よく!楽に! ~fundoshi.hppの紹介と 今後の予定~ Photo by KAIZUKA Creative
Commons BY-NC-SA 2.0 http://www.flickr.com/photos/kaizuka/386511394/ http://www.slideshare.net/maraigue/ 20121117-clrhc-fundoshihpp 【前回の発表(2012.11.17)】
6.
宣伝
7.
http://www.ospn.jp/osc2013-do/ • 今年は9月なのでお間違いなく! • 場所もコンベンションセンターなので お間違いなく! •
ブース・セミナー申込締切は 7月22日(月)です
8.
よろしく お願いします
9.
本題
10.
C++用将棋ライブラリ "OpenShogiLib"の紹介 H.Hiro (Sapporo.cpp) http://hhiro.net/about/ Twitter: @h_hiro_
11.
ということで これから将棋の話を するわけですが
12.
第2回電王戦 (プロ棋士とコンピュータの五番勝負) http://ex.nicovideo.jp/denousen2013/
13.
コンピュータ側の第5局を 戦った「GPS将棋」 http://gps.tanaka.ecc.u-tokyo.ac.jp/gpsshogi/
14.
このうち、汎用的な 部分を切り出したのが OpenShogiLibです
15.
さて
16.
コンピュータに 将棋を扱わせるには 何が必要か
17.
[質問] 将棋をよく/たまに やるよ!という方
18.
[質問] 将棋はあまり しないけど 何となくどんな ゲームかは分かる方
19.
今日必要な前提知識(1/3) 将棋は、二人が順番に 駒を動かすゲームです 駒の動かし方 の表を別途 配布して おります
20.
今日必要な前提知識(1/3) 将棋は、二人が順番に 駒を動かすゲームです 取った駒は 盤上に打つ ことができます
21.
今日必要な前提知識(2/3) 駒にはそれぞれ動きが 決められています
22.
今日必要な前提知識(3/3) 勝利条件は、相手の玉(王) を取ることです 右図のように、実際に 玉を取らなくても、次に 取れることが確定すれば 勝ち(詰み)。
23.
コンピュータ上で 将棋を扱うのに 必要そうなデータ構造
24.
•将棋盤(81マス) •将棋駒(40個) •駒が動ける場所
25.
•将棋盤(81マス) →9×9の2次元配列? •将棋駒(40個) →40個の配列? •駒が動ける場所 →8種をハードコーディング →ルール上動けない場所
26.
OpenShogiLibが これらを全部 提供してくれます
27.
導入方法 & 簡単な利用方法
28.
導入方法 • # apt-get
install libosl-dev •ソースコードから導入の 場合、boostが必要 •Windowsでは試してません もしかしたら面倒かも
29.
// http://blog.livedoor.jp/maraigue/archives/1711816.html // SimpleStateは盤面のみを保持するクラス state::SimpleState
sstate(osl::HIRATE); // NumEffectStateは盤面+駒の動きを扱えるクラス state::NumEffectState nstate(sstate); Move move; // 先手(BLACK)の(7,7)にあるPAWN(歩兵)を、 // (7,6)という何もないマス(PTYPE_EMPTY)に動かす move = Move(Square(7,7), Square(7,6), PAWN, PTYPE_EMPTY, false, BLACK); if(nstate.isValidMove(move)){ nstate.makeMove(move); }
30.
// http://blog.livedoor.jp/maraigue/archives/1711816.html // SimpleStateは盤面のみを保持するクラス state::SimpleState
sstate(osl::HIRATE); // NumEffectStateは盤面+駒の動きを扱えるクラス state::NumEffectState nstate(sstate); Move move; // 先手(BLACK)の(7,7)にあるPAWN(歩兵)を、 // (7,6)という何もないマス(PTYPE_EMPTY)に動かす move = Move(Square(7,7), Square(7,6), PAWN, PTYPE_EMPTY, false, BLACK); if(nstate.isValidMove(move)){ nstate.makeMove(move); }
31.
// http://blog.livedoor.jp/maraigue/archives/1711816.html // SimpleStateは盤面のみを保持するクラス state::SimpleState
sstate(osl::HIRATE); // NumEffectStateは盤面+駒の動きを扱えるクラス state::NumEffectState nstate(sstate); Move move; // 先手(BLACK)の(7,7)にあるPAWN(歩兵)を、 // (7,6)という何もないマス(PTYPE_EMPTY)に動かす move = Move(Square(7,7), Square(7,6), PAWN, PTYPE_EMPTY, false, BLACK); if(nstate.isValidMove(move)){ nstate.makeMove(move); }
32.
これで、とりあえず 将棋が指せる ことはわかった
33.
では、もう少し 凝ったことを してみよう
34.
詰将棋
35.
こんなのが詰将棋です
36.
こんなのが詰将棋です
37.
詰将棋の目的: 王手のみを続けて 相手の玉を詰める
38.
まずは人手で解いてみる
39.
人手だと 何となく 「この手が正解っぽい」 と分かるけど
40.
コンピュータには どう解かせる?
41.
詰将棋の目的: 王手のみを続けて 相手の玉を詰める
42.
コンピュータには 王手になる手を 総当りで指させる
43.
コンピュータには 王手になる手を 総当りで指させる (自分の立場)
44.
コンピュータには 王手を回避する手を 総当りで指させる (相手の立場)
45.
• 詰みとなる条件 相手がどう指そうとも 自分の手によっては 王手を回避できなくなる • 詰まない条件 自分がどう指そうとも 相手の手によっては 王手をかけられなくなる
46.
ここから王手になる手は?
47.
実は4通りある
48.
先に進めると 手の数はすごいことになる
49.
コンピュータに 全部試させればよい // [駒を動かして王手] ActionTryMove acm(mt_new,
nstate, depth, max_depth); for(int i = 0; i < osl::Piece::SIZE; ++i){ p = nstate.pieceOf(i); if(p.isOnBoardByOwner(osl::BLACK)){ // 盤上にある先手の駒の場合 nstate.forEachEffectOfPiece<ActionTryMove>(p, acm) } } valid_moves += acm.valid_moves();
50.
コンピュータに 全部試させればよい // [駒を動かして王手] ActionTryMove acm(mt_new,
nstate, depth, max_depth); for(int i = 0; i < osl::Piece::SIZE; ++i){ p = nstate.pieceOf(i); if(p.isOnBoardByOwner(osl::BLACK)){ // 盤上にある先手の駒の場合 nstate.forEachEffectOfPiece<ActionTryMove>(p, acm) } } valid_moves += acm.valid_moves(); 将棋で用いる全部の駒 (40個)についてループ
51.
コンピュータに 全部試させればよい // [駒を動かして王手] ActionTryMove acm(mt_new,
nstate, depth, max_depth); for(int i = 0; i < osl::Piece::SIZE; ++i){ p = nstate.pieceOf(i); if(p.isOnBoardByOwner(osl::BLACK)){ // 盤上にある先手の駒の場合 nstate.forEachEffectOfPiece<ActionTryMove>(p, acm) } } valid_moves += acm.valid_moves(); 動かしてみる
52.
コンピュータに 全部試させればよい // class ActionTryMove
の中身 template<osl::Player pl> void doAction (const osl::Piece & pc, const osl::Square & sq){ /*(中略)*/ if(osl::isPiece(pc.ptype()) && osl::canPromote(pc.ptype())){ // 成れる駒ならば、成ってみる if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } } // 成らない場合 if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } }
53.
コンピュータに 全部試させればよい // class ActionTryMove
の中身 template<osl::Player pl> void doAction (const osl::Piece & pc, const osl::Square & sq){ /*(中略)*/ if(osl::isPiece(pc.ptype()) && osl::canPromote(pc.ptype())){ // 成れる駒ならば、成ってみる if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } } // 成らない場合 if(recursive_search(/*(中略)*/) != -2){ ++valid_moves_; } } 成れるかどうか判定し 成らないケースとともに試す
54.
コンピュータに 全部試させればよい if(nstate.isValidMove(*p_move)){ // 動かせるか確認 nstate.makeMove(*p_move);
// 動かす // (先手が指した結果の場合)後手玉が王手になっている // (後手が指した結果の場合)後手玉が王手になっていない if(logical_xor(depth % 2 == 1, nstate.inCheck(osl::WHITE))){ mt_new = MoveTree::createNewPtr(*p_move); mt->children.push_back(mt_new); }else{ return -2; } }else{ return -2; // 動かせない場合 }
55.
コンピュータに 全部試させればよい if(nstate.isValidMove(*p_move)){ // 動かせるか確認 nstate.makeMove(*p_move);
// 動かす // (先手が指した結果の場合)後手玉が王手になっている // (後手が指した結果の場合)後手玉が王手になっていない if(logical_xor(depth % 2 == 1, nstate.inCheck(osl::WHITE))){ mt_new = MoveTree::createNewPtr(*p_move); mt->children.push_back(mt_new); }else{ return -2; } }else{ return -2; // 動かせない場合 } まず、将棋のルールとして 動けるかをチェック
56.
コンピュータに 全部試させればよい if(nstate.isValidMove(*p_move)){ // 動かせるか確認 nstate.makeMove(*p_move);
// 動かす // (先手が指した結果の場合)後手玉が王手になっている // (後手が指した結果の場合)後手玉が王手になっていない if(logical_xor(depth % 2 == 1, nstate.inCheck(osl::WHITE))){ mt_new = MoveTree::createNewPtr(*p_move); mt->children.push_back(mt_new); }else{ return -2; } }else{ return -2; // 動かせない場合 } 続いて、王手をかける/ 回避するという条件をチェック
57.
実際に 動かしてみる https://github.com/maraigue/ clrhsapporocpp-20130713
58.
補足
59.
•詰将棋を解くだけなら OpenShogiLibに最初から コードがある •でも、それ以上のことを したかったので 自前で書いた
60.
詰将棋制作支援の プログラムが欲しかった •回答が一意に定まる必要 •余計な駒を使わない :
61.
•そういう機能を持つ ソフトもあるのだが 有料なうえに絶版 •なので自分で作りたかった
62.
おわりに
63.
将棋は 自身で遊ぶだけでなくて コンピュータ的にも 奥が深いです
64.
OpenShogiLibは ドキュメントがあまり整備 されてないので Tipsをブログとかに書くと 喜ばれるかも?
65.
ありがとう ございました
Jetzt herunterladen