ユニコードポイントへの変換(ord) Unicodeコードポイントからの変換(chr)を利用してチェス盤上の安全なポーンを探す(checkio)
備忘録です。
チェス盤上の安全なポーンを探すって何?という感じなのですが、こちらはcheckioをしているときに出てきた問題chr()という関数を初めて使ったのでそちらの備忘録です。
ポーンが安全かどうかをチェックする関数
むかーしちょっとやったことのあるチェスですが、すでに動かし方やルールを忘れていました。ただ、ルールはともかくとしてある位置に駒があるのかどうかを確認するという関数を作れば今回の目的は達成します。
位置を確認する条件
ポーンっていう駒は自分の右上と左上のエリアにいる駒を保護してくれるらしいので、例えばあるポーンが盤上に存在すると、そのポーンは右下、または左下に別のポーンがいれば安全圏にいるということになるみたいです。なので、今回は盤上に複数のポーンがいて、それぞれのポーンが安全かどうか、つまりそのポーンの右下、もしくは左下に別のポーンがいるかどうかをチェックします。
※説明がむずい。。。
※ちなみにチェスは列方向にa~h、行方向に1~8の番号がふってあるのでそれぞれのマスはa1, b3などのように呼ぶようです。
右下、左下にポーンがいるかの確認方法
今回、ポーンが今いる位置の右下、左下にポーンがいるか確認するということなので、今いる位置のマス目から右下、左下のマス目を求めれば良いということになります。求め方は色々あると思うのですが、例えばマス目「b5」の左下は「a4」右下は「c4」になります。つまりアルファベットはひとつ前と後、数字はひとつ下になるのでそれを求めれば良いことになります。
※説明がやばい。。。わかりずらい
とりあえずコード
こんな感じで求めてみました
上記で関数にわたしている引数はポーンが置いてある位置です。上記の例では"b4", "d4", "f4", "c3", "e3", "g5", "d2"この7つの位置にポーンが置いてあります。そして自分の右下、左下の位置にポーンがあればいいので、この集合内にそのマス目が入っていれば良いということになります。
例えば、b4から見るとc3は右下に位置するのでb4は安全!という感じです。
今回、chrを使用したのは、アルファベットの並びを式として求めるのにアルファベット自体を数字にできたら簡単だなということからでした。
aは Unicodeコードポイントでは97になります。ということはbは98になります。この数字を利用したのが今回の関数です。
今回は以上ですが、これ備忘録で後で見直しても自分の文章見て思い出すことができるかな。。。心配です。