Home問題5 チェス
守られているポーンの数を数えるという課題。
説明しにくいので、適当に
とりあえず、特定のポーンを守れる場所に別のポーンがあるかどうかを判別
ある場合だけsafe ポーンとして数えるというアルゴリズムで
def safe_pawns(pawns): safe = 0 for i1 in pawns: ok = [1 for i2 in pawns if i2 ==chr(ord(i1[0])-1) + chr(ord(i1[1])-1) \ or i2 ==chr(ord(i1[0])+1) + chr(ord(i1[1])-1)] if len(ok)>0: safe += 1 return safe assert safe_pawns({"b4", "d4", "f4", "c3", "e3", "g5", "d2"}) == 6 assert safe_pawns({"b4", "c4", "d4", "e4", "f4", "g4", "e5"}) == 1
一番人気は、if文をもっと効率的に使っていました。シンプルに考えれば良かったですね。
safe = 0 for i1 in pawns: if chr(ord(i1[0])-1) + chr(ord(i1[1])-1) in pawns \ or chr(ord(i1[0])+1) + chr(ord(i1[1])-1) in pawns: safe += 1 return safe