Programming Complex Algorithm in Swift

37
Programming Complex Algorithm in Swift Kaz Yoshikawa

Transcript of Programming Complex Algorithm in Swift

Programming Complex Algorithm in Swift

Kaz Yoshikawa

Background

• Swift について深く学びたい

• 超複雑なアルゴリズムを要する課題に取り込めばいいのでは?

• そんな課題は…

Quick Review Rules

Shogi Rules• 9x9の将棋盤を用意する

• 歩、香、桂、銀、金、角、飛、王の駒を使う

• 先手、後手交互に指す

• 敵陣内に移動、敵陣内で移動した場合は成る事ができる

• 金、王は成る事ができない

• 一度なった駒は元に戻せない

Shogi Rules• 自駒の移動先に敵駒がある場合は取る事ができる

• 先に相手の王を取った方が勝ちとなる

• 王がどこに移動しても、相手の駒に取られてしまう状態を詰みとし、勝負がついたものとする

• 取った駒は空いている場所に打つ事ができる

• 成った駒をとっても、打つときは成った状態で打てない

Shogi Rules• 歩は同じ列に2つ置いてはいけない(2歩)

• 歩を打って、相手の王を詰めてはいけない(打ち歩詰め)

• 歩、香、桂は次の手で移動できなくなる手は指してはならない

• 千日手や相入玉などの特殊な状態がある

駒の動き 出典:早わかり将棋Book・日本将棋連盟

駒の動き 出典:早わかり将棋Book・日本将棋連盟

成り 出典:早わかり将棋Book・日本将棋連盟

成り 出典:早わかり将棋Book・日本将棋連盟

Pain in the Ass

• 間違いなく面倒くさそう

• C/C++ でもなかなか綺麗にかけなさそう

• 実は Objective-C で以前トライしていた

DEMO

将棋盤Kit(仮)

将棋盤Kit• Framework または Library

• 将棋の基本的な駒の動作・制限・ルールを実装

• 実際のAIには手を出さない…

• 絶対に…

• おそらく…

(仮)

Using Unicode for identifiers

Using Unicode Names• せっかくなので、積極的に日本語を使っていこう

• クラス名

• 変数名

• 関数名、メソッド名

• パラメータ名など

Unicode in type name

Capitalization Issue

Solution1.タイプ名では英語を使う

• 変数は日本語で

2.日本語タイプ名にプレフィックスをつける

Using Unicode for Variables, Parameters

• 変数名、パラメータ名、などでは大文字小文字問題はなさそう

Unicodes for Identifiers😀

🐶

🍎

🀀

♞☁

OK NG

Plural Issue

• 日本語は単数形・複数形を意識しない場合が多い

• object ↔ objects OK

• オブジェクト ↔ オブジェクト群 ?

• var pieces: Piece → var 駒s: Piece

Plural Issue• 英語でも実は同じ問題がある

• Data の複数形は → 実は datum の複数形

• sheep の複数形は / fish の複数形?

• 文法を気にせず太く生きる

• (例)Toronto Maple Leafs

Naming Issue

Expressions

Implement Movement• 動きは2種類

• 決まった方向へ決まったマスの数だけ移動

• 連続して移動

http://www.geocities.co.jp/Playtown/6157/oboeru/ugoki.html

Step Movement

Array of Tuple

Fly Movement

Checkmate, Foul and other rules

Now Printing

誠意、実装中

DEMO

Conclusion

Hasn't come that far yet..

そこまで、深いところには、まだだどりついていなかった…

Last word

–Kaz Yoshikawa

“May the Swift be with you”