A*

ここのところA*をSwiftで実装していた。

アルゴリズムwikipediaのとおり

https://ja.wikipedia.org/wiki/A*

案の定なかなか動かないのだけど、いちど動いてしまえばああそうか、みたいな簡単なものである。 なかなかうまくいかないのは日本語の解釈の問題なので、 それはつまり読み取り側の能力が足りないからだけど、 アルゴリズム自然言語じゃなく架空でいいのでプログラミング言語っぽい言語で書いて欲しいものである。

ノード配列から最小値を持つノードを見つける、なんてのはSwiftっぽい書き方ができてちょっとうれしい。

    while let n = openList.min(by: { (a, b) -> Bool in a.value < b.value }) {〜}

ただ「取り出す」などと書いてあるとそれはリストからremoveすることも意味していたりするので 削除するとなるとindexが必要で…などとなってちょっとAh...という気持ちになる

別件で UIGraphicsImageRenderer も調べていたので問題と解を画像化してみたりしてみた。 f:id:hrt1ro:20180914144317p:plain