AtCoder, ABC303-A, より簡潔なコードにするにはどうしたらよいでしょうか?

他の方の回答からわかるように、「より簡潔なもの」と「他者から見て分かりやすい」というのは異なる場合が多いです。

自分が「他者から見て分かりやすい」について気にしながら書くと以下のような感じでしょうか。

python

1def similar_char(char_1, char_2):2 if char_1 == char_2:3 return True4 elif (char_1 == 'l' and char_2 == '1') \ 5 or (char_1 == '1' and char_2 == 'l'):6 return True7 elif (char_1 == '0' and char_2 == 'o') \ 8 or (char_1 == 'o' and char_2 == '0'):9 return True10 else:11 return False12 13 14def similar_string(str_1, str_2):15 result = True16 for c1, c2 in zip(str_1, str_2):17 if not similar_char(c1, c2):18 result = False19 return result 20 21 22def main():23 N = int(input()) # Do not use.24 S = input()25 T = input()26 27 if similar_string(S, T):28 print('Yes')29 else:30 print('No')31 32 33main()

  • 処理の流れが把握しやすいように関数化する。
    similar_stringと similar_char に分けた。こうすることでどういう目的の処理なのか明確にできる。特にsimilar_charは、出題=仕様どおりの実装にしてある。
    それぞれの関数はもっと短くできますけど、するかどうかはチームの考えかたによる。

  • 関数がやっていることがわかるように書く。
    手続だけ書いてしまうと意図がわかりにくくなる。
    main()は、「入力されたSとTがsimilar_stringであったら Yes、 そうでなければ No と出力する」という処理。関数名も何をするのかわかるような名前 is_similar_string()でもいいかもしれない。
    similar_string()は、「中の文字をそれぞれsimilar_charで調べて、1つでも違うものがあればFalse」=「全てsimilar_charであればTrue」という処理。

見る人のスキルによってまったく異なります。

コメントを投稿

0 コメント