前提・実現したいこと
8×8マスのチェス盤面にn個(0<n<=8)のポーンだけが置かれているのを想定します。ポーンは隣接した斜め前にある敵の駒を、そのマスに動かすことによって取ることができます。(今回は敵の駒は登場しませんが。)この時、あるポーンAが他のポーンの隣接した斜め前にあればポーンAは安全であるとします。ここで、ポーンが置かれているマスの座標のセットが与えられた時に、幾つのポーンが安全であるかを整数で返す関数を作成しました。しかし、あるポーンが置かれているマスの座標のセットを与えた時に、関数が誤った結果を返しました。(7と返すところを8と返してしまった。)
誤った結果を返してしまった原因を探りましたが解らなかったので、原因を教えていただきたいです。
発生している問題・エラーメッセージ
関数が誤った結果を返したときに与えられた、ポーンが置かれているマスの座標のセットはhogeです。
hoge = ["a1","b2","c3","d4","e5","f6","g7","h8"]
これは以下のようなポーンの配置を表しています。
python
18[ ][ ][ ][ ][ ][ ][ ][p] 27[ ][ ][ ][ ][ ][ ][p][ ] 36[ ][ ][ ][ ][ ][p][ ][ ] 45[ ][ ][ ][ ][p][ ][ ][ ] 54[ ][ ][ ][p][ ][ ][ ][ ] 63[ ][ ][p][ ][ ][ ][ ][ ] 72[ ][p][ ][ ][ ][ ][ ][ ] 81[p][ ][ ][ ][ ][ ][ ][ ] 9 a b c d e f g h
該当のソースコード
定義した関数と、hogeを引数として関数を実行した結果は以下です。(今回質問をするにあたって、関数の挙動を可視化するためにprintやreturn(a)を追加しましたが、本来はreturn(b)のみが返り値です。)
定義した関数
python
1def safe_pawns(hoge): 2 hoge = [i.replace('a','1') for i in hoge] 3 hoge = [i.replace('b','2') for i in hoge] 4 hoge = [i.replace('c','3') for i in hoge] 5 hoge = [i.replace('d','4') for i in hoge] 6 hoge = [i.replace('e','5') for i in hoge] 7 hoge = [i.replace('f','6') for i in hoge] 8 hoge = [i.replace('g','7') for i in hoge] 9 hoge = [i.replace('h','8') for i in hoge] 10 a=[] 11 b=0 12 for j in hoge: 13 a.append(int(j)) 14 for k in a: 15 print('kの値は',k) 16 if (k+11 & k-9) in a: 17 b += 2 18 print('bの値は',b,'パターン1') 19 elif (k+11 & k-9 & k+2) in a: 20 b += 1 21 print('bの値は',b,'パターン2') 22 elif (k+11 or k-9) in a: 23 b += 1 24 print('bの値は',b,'パターン3') 25 for l in range(len(a)): #特殊なポーンの配置の場合を想定したもので、ここが原因になってるわけではないと思います。 26 if (a[l]+20 in a) & (a[l]+11 in a) & (a[l]+9 not in a): 27 b -= 1 28 return(b,a)
実行結果
python
1kの値は 11 2bの値は 1 パターン3 3kの値は 22 4bの値は 2 パターン3 5kの値は 33 6bの値は 3 パターン3 7kの値は 44 8bの値は 4 パターン3 9kの値は 55 10bの値は 5 パターン3 11kの値は 66 12bの値は 6 パターン3 13kの値は 77 14bの値は 7 パターン3 15kの値は 88 16bの値は 8 パターン2 17 18(8, [11, 22, 33, 44, 55, 66, 77, 88]) #本来は7と返すところを8と返してしまっている
試したこと
今回の疑問は、実行結果の最後の方の「bの値は 8 パターン2」という部分で、なぜ「パターン2」になっているのかということです。このようになっている原因について教えていただきたいと思っています。
回答2件
あなたの回答
tips
プレビュー