0852 - Paranteze3
Cerința
Se dau n șiruri de paranteze rotunde sau pătrate. Să se stabilească, despre fiecare șir, dacă este corect parantezat – adică dacă parantezele se închid corect.
Un șir de paranteze S rotunde este corect parantezat dacă:
- S este șirul vid, sau
- S = (T) și T este corect parantezat, sau
- S = [T] și T este corect parantezat, sau
- S = AB, iar A și B sunt corect parantezate.
Date de intrare
Fișierul de intrare paranteze3.in conține pe prima linie numărul n, pe următoarele n linii câte un șir de paranteze rotunde sau pătrate.
Date de ieșire
Fișierul de ieșire paranteze3.out va conține n linii: fiecare linie va conține valoarea 1, dacă șirul corespunzător de paranteze este corect parantezat și 0 în caz contrar.
Restricții și precizări
- 1 ≤ n ≤ 100
- fiecare șir va avea cel mult 255 de paranteze
Exemplu:
paranteze3.in
- 4
- ()[]
- )([]
- ()[(()[])()]
([)]
paranteze3.out
- 1
- 0
- 1
- 0
Rezolvare
<syntaxhighlight lang="python" line="1" start="1">
def verifica_paranteze(sir):
stiva = [] for paranteza in sir: if paranteza in "([": stiva.append(paranteza) else: if not stiva: return 0 top = stiva.pop() if paranteza == ")" and top != "(": return 0 elif paranteza == "]" and top != "[": return 0 if stiva: return 0 return 1
with open('paranteze3.in', 'r') as fin:
n = int(fin.readline().strip()) siruri = [fin.readline().strip() for _ in range(n)]
rezultate = [verifica_paranteze(sir) for sir in siruri]
with open('paranteze3.out', 'w') as fout:
for rezultat in rezultate: fout.write(str(rezultat) + '\n')
</syntaxhighlight>