1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで競プロに挑む日誌 vol.17 ~テストケースが思いつかない(解決済み)~

Last updated at Posted at 2018-11-06

現在の目標

  • 2018年内に茶色になる←イマココ
  • ABC の A, B 問題を全部解く
  • 2018年度内に緑色を取得する
  • 水色になったら, APG4b で C++ にも手を出す

今日のおはなし

結論

提出前のテストのやり方も学ぶ必要がありそう.

解いた問題

B - 3人でカードゲームイージー / Card Game for Three (ABC Edit)

入力例 1,2 は通ったけど, 提出したら WA となった解答

WA_answer.py
# coding: utf-8
A, B, C = [input() for _ in range(3)]
 
x = A[0]
while True:
    if x == "a":
        if A:
            x = A[0]
            A = A.lstrip(A[0])
        else:
            print("A")
            break
    elif x == "b":
        if B:
            x = B[0]
            B = B.lstrip(B[0])
        else:
            print("B")
            break
    else:
        if C:
            x = C[0]
            C = C.lstrip(C[0])
        else:
            print("C")
            break

AC だった解答

AC_answer.py
# coding: utf-8
A, B, C = [input() for _ in range(3)]
 
x = A[0]
cnt_a = 0
cnt_b = 0
cnt_c = 0
for _ in range(len(A)+len(B)+len(C)):
    if x == "a":
        if cnt_a < len(A):
            x = A[cnt_a]
            cnt_a += 1
        else:
            print("A")
            break
    elif x == "b":
        if cnt_b < len(B):
            x = B[cnt_b]
            cnt_b += 1
        else:
            print("B")
            break
    else:
        if cnt_c < len(C):
            x = C[cnt_c]
            cnt_c += 1
        else:
            print("C")
            break

なぜ前者がダメで, 後者が通るのか理由がわからない. 有効なテストケースも思いつかず... うーむ, 何がいけないのだろう.

追記

その後, Twitter で親切な方がアドバイスしてくれた. lstrip を使うべきではなかった模様. たとえば、「aabc」を入力した場合, lstrip("a") とするとその出力は「bc」になってしまう.

同じような罠にハマった人がほかにもいる模様(コチラなど). 削除対象の文字が連続する場合は一気に削除されてしまうので, 今後も使い方には注意が必要ですね.

初歩的な内容ですが, 勉強になりました. 感謝.

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?