現在の目標
今日のおはなし
結論
提出前のテストのやり方も学ぶ必要がありそう.
解いた問題
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」になってしまう.
同じような罠にハマった人がほかにもいる模様(コチラなど). 削除対象の文字が連続する場合は一気に削除されてしまうので, 今後も使い方には注意が必要ですね.
初歩的な内容ですが, 勉強になりました. 感謝.