0848 - Paranteze1
De la Universitas MediaWiki
Cerința
Se dau n șiruri de paranteze rotunde. 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 = AB, iar A și B sunt corect parantezate.
Date de intrare
Fișierul de intrare paranteze1in.txt conține pe prima linie numărul n, pe următoarele n linii câte un șir de paranteze rotunde.
Date de ieșire
Fișierul de ieșire paranteze1out.txt 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
Exemplul 1:
paranteze1in.txt
- 4
- (())
- )(()
- ()((()())())
- ()(
paranteze1out.txt
- Datele de intrare corespund restrictiilor impuse.
- 1
- 0
- 1
- 0
Exemplul 2:
paranteze1in.txt
- 2h
paranteze1out.txt
- Datele de intrare nu corespund restrictiilor impuse
Rezolvare
def validare(numar, string): # functia de validare a datelor de intrare
if numar < 1 or numar > 100:
raise ValueError
for sir in string:
if len(sir) > 255:
raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def este_corect_parantezat(s): # functia de rezolvare
stiva = []
for paranteza in s:
if paranteza == '(':
stiva.append(paranteza)
elif paranteza == ')':
if len(stiva) == 0:
return 0
stiva.pop()
return 1 if len(stiva) == 0 else 0
if __name__ == '__main__':
file_in = open('paranteze1in.txt', 'r')
file_out = open('paranteze1out.txt', 'w')
try:
n = int(file_in.readline().strip())
siruri = [file_in.readline().strip() for _ in range(n)]
validare(n, siruri)
rezultate = [este_corect_parantezat(sir) for sir in siruri]
for rezultat in rezultate:
file_out.write(str(rezultat) + '\n')
except ValueError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")
except IndexError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")