0848 - Paranteze1

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 1 ≤ n ≤ 100
  • fiecare șir va avea cel mult 255 de paranteze

Exemplul 1:[edit | edit source]

paranteze1in.txt

4
(())
)(()
()((()())())
()(

paranteze1out.txt

Datele de intrare corespund restrictiilor impuse.
1
0
1
0

Exemplul 2:[edit | edit source]

paranteze1in.txt

2h

paranteze1out.txt

Datele de intrare nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1">

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")

</syntaxhighlight>