高橋くんが忘れてしまった暗証番号として、あり得るものが何通りあるか求める問題です。
提出
s = input()
ans = 0
for i in range(10000):
check = True
flag = [False]*10
now = str(i).zfill(4)
for j in range(4):
flag[int(now[j])]=True
for j in range(10):
if s[j]=="o" and flag[j]==False:
check = False
if s[j]=="x" and flag[j]:
check = False
if check:
ans += 1
print(ans)
入力は文字列Sのみです。
「0000~9999」までの数字を全探索し、文字列Sで分かる条件に当てはまっているかどうかを調べ、当てはまっていれば、答えの「ans」を足していく、という方法で求めていきます。
要素が10個のflagリストを作成し、すべて「False」にしておき、そのときの4桁の数字だけ「True」にします。
zfill() は右寄せで0埋めするメソッドです。4は桁数となります。
この4桁のflagを「True」にした後、文字列Sの条件に当てはまっているかを確認します。
Sjが「o」のときは、確実に含まれているはずなので、「flag[j]==False」とはなりません。
Sjが「x」のときの「flag[j]==True」もあり得ないです。
上記2つの場合に「check = False」をして、最後に「check」を確認し、Trueであれば、「ans」に1足します。