Page 1
Programming Complex Algorithm in Swift
Kaz Yoshikawa
Page 2
Background
• Swift について深く学びたい
• 超複雑なアルゴリズムを要する課題に取り込めばいいのでは?
• そんな課題は…
Page 4
Quick Review Rules
Page 5
Shogi Rules• 9x9の将棋盤を用意する
• 歩、香、桂、銀、金、角、飛、王の駒を使う
• 先手、後手交互に指す
• 敵陣内に移動、敵陣内で移動した場合は成る事ができる
• 金、王は成る事ができない
• 一度なった駒は元に戻せない
Page 6
Shogi Rules• 自駒の移動先に敵駒がある場合は取る事ができる
• 先に相手の王を取った方が勝ちとなる
• 王がどこに移動しても、相手の駒に取られてしまう状態を詰みとし、勝負がついたものとする
• 取った駒は空いている場所に打つ事ができる
• 成った駒をとっても、打つときは成った状態で打てない
Page 7
Shogi Rules• 歩は同じ列に2つ置いてはいけない(2歩)
• 歩を打って、相手の王を詰めてはいけない(打ち歩詰め)
• 歩、香、桂は次の手で移動できなくなる手は指してはならない
• 千日手や相入玉などの特殊な状態がある
Page 8
駒の動き 出典:早わかり将棋Book・日本将棋連盟
Page 9
駒の動き 出典:早わかり将棋Book・日本将棋連盟
Page 10
成り 出典:早わかり将棋Book・日本将棋連盟
Page 11
成り 出典:早わかり将棋Book・日本将棋連盟
Page 12
Pain in the Ass
• 間違いなく面倒くさそう
• C/C++ でもなかなか綺麗にかけなさそう
• 実は Objective-C で以前トライしていた
Page 15
将棋盤Kit• Framework または Library
• 将棋の基本的な駒の動作・制限・ルールを実装
• 実際のAIには手を出さない…
• 絶対に…
• おそらく…
(仮)
Page 16
Using Unicode for identifiers
Page 17
Using Unicode Names• せっかくなので、積極的に日本語を使っていこう
• クラス名
• 変数名
• 関数名、メソッド名
• パラメータ名など
Page 18
Unicode in type name
Page 19
Capitalization Issue
Page 20
Solution1.タイプ名では英語を使う
• 変数は日本語で
2.日本語タイプ名にプレフィックスをつける
Page 21
Using Unicode for Variables, Parameters
• 変数名、パラメータ名、などでは大文字小文字問題はなさそう
Page 22
Unicodes for Identifiers😀
🐶
🍎
🀀
♞☁
OK NG
Page 23
Plural Issue
• 日本語は単数形・複数形を意識しない場合が多い
• object ↔ objects OK
• オブジェクト ↔ オブジェクト群 ?
• var pieces: Piece → var 駒s: Piece
Page 24
Plural Issue• 英語でも実は同じ問題がある
• Data の複数形は → 実は datum の複数形
• sheep の複数形は / fish の複数形?
• 文法を気にせず太く生きる
• (例)Toronto Maple Leafs
Page 27
Implement Movement• 動きは2種類
• 決まった方向へ決まったマスの数だけ移動
• 連続して移動
http://www.geocities.co.jp/Playtown/6157/oboeru/ugoki.html
Page 28
Step Movement
Array of Tuple
Page 30
Checkmate, Foul and other rules
Page 31
Now Printing
誠意、実装中
Page 34
Hasn't come that far yet..
そこまで、深いところには、まだだどりついていなかった…
Page 36
–Kaz Yoshikawa
“May the Swift be with you”
Page 37
Thank you
[email protected] Yoshikawa