▼考え方
ポイントになる考え方1.~2.を以下に示します。
1.テストの結果はすべて、辞書TJを用いて管理します。keyはテストの記号(TA,TB,TC,TD)で、valueはリスト形式です。valueの1要素目はテストの成功回数、2要素目はテストの失敗回数、3要素目はテストに合格ならば1とします。いずれの要素も初期値は0です。以下に例を示します。
例1)テストTAを初めて実施し結果が成功だった場合、以下のkey,valueをTJに追加します。
TJ["TA"] = [1,0,0]
例2)テストTAを初めて実施し結果が失敗だった場合、以下のkey,valueをTJに追加します。
TJ["TA"] = [0,1,0]
例3)2回目のテストTAに失敗した場合、すでに存在するkey:"TA"のvalueの2要素目を更新します。
TJ["TA"] = [<任意>,2,0]
例4)テストTAに2回失敗する前に2回成功した場合、すでに存在するkey:"TA"のvalueの1,3要素目を更新します。
TJ["TA"] = [2,<0or1>,1]
2.題意とおり、被験者の視力(A~E)を1行で出力します。辞書TJにテストの記号が存在しかつ合格していることが条件です。テストの記号が存在するかどうかはTA→TB→TC→TDの順番で検索します。条件に合致したら出力し検索を終了します。条件に合致しない場合は、題意よりEを出力します。
▼コード
########## 処理0(準備) インプット,リスト定義 ###########
N = int(input())
# TJ: テストの結果を管理する辞書
TJ = {}
# TEST: テストの記号を格納したリスト。考え方2使用
TEST = ["TA","TB","TC","TD"]
########## 処理1 XXX ###########
# 考え方1.
for i in range(N):
# t,j: 標準入力から渡されるテストの記号と結果を一時的に格納する変数
t,j = input().split()
if t not in TJ.keys():
if j == "ok":
TJ[t] = [1,0,0]
else:
TJ[t] = [0,1,0]
else:
if j == "ok":
TJ[t][0] += 1
if TJ[t][0] == 2 and TJ[t][1] < 2:
TJ[t][2] = 1
else:
TJ[t][1] += 1
# 考え方2.
for i in range(len(TEST)):
if (TEST[i] in TJ.keys()) and (TJ[TEST[i]][2] == 1):
print(TEST[i][-1])
break
else:
print("E")