python; checkio日記

checkioを中心にpythonプログラミングの記録

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