0849 - Paranteze2

From Bitnami MediaWiki
Revision as of 22:05, 13 November 2023 by Bonte Lucas Gabriel (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Se dă un șir de paranteze rotunde care se închid corect (corect parantezat). Să se determine adâncimea parantezării.

Pentru un șir de paranteze închise corect S, adâncimea parantezării, D(S) este definită astfel:

dacă șirul S este vid, D(S)=0 dacă S=(T), unde T este un șir de paranteze corect, D(S)=1+D(T) dacă S=AB, unde A și B sunt șiruri de paranteze corecte, D(S)=max{D(A),D(B)}

Date de intrare

Fișierul de intrare paranteze2in.txt conține pe prima un șir de paranteze rotunde, corect parantezat.

Date de ieșire

Fișierul de ieșire paranteze2out.txt va conține pe prima linie un număr M, reprezentând adâncimea parantezării.

Restricții și precizări

  • șirul va conține cel mult 254 de paranteze

Exemplul 1:

paranteze2in.txt

1
()((()())())

paranteze2out.txt


Datele de intrare corespund restrictiilor impuse.
3

Exemplul 2:

paranteze2in.txt

h

paranteze2out.txt

Datele de intrare nu corespund restrictiilor impuse.


Rezolvare

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

def validare(strings): # functia de validare a datelor de intrare

   for sir in strings:
       if len(sir) > 254:
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def adancime_parantezare(sir): # functia de rezolvare

   adancime_maxima = 0
   adancime_curenta = 0
   for paranteza in sir:
       if paranteza == '(':
           adancime_curenta += 1
           if adancime_curenta > adancime_maxima:
               adancime_maxima = adancime_curenta
       elif paranteza == ')':
           adancime_curenta -= 1
   return adancime_maxima


if __name__ == '__main__':

   file_in = open('paranteze2in.txt', 'r')
   file_out = open('paranteze2out.txt', 'w')
   try:
       n = int(file_in.readline().strip())
       siruri = [file_in.readline().strip() for _ in range(n)]
       validare(siruri)
       rezultate = [adancime_parantezare(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>