0849 - Paranteze2: Difference between revisions
Pagină nouă: ==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)}... |
No edit summary |
||
Line 11: | Line 11: | ||
==Date de intrare== | ==Date de intrare== | ||
Fișierul de intrare ''' | Fișierul de intrare '''paranteze2in.txt''' conține pe prima un șir de paranteze rotunde, corect parantezat. | ||
==Date de ieșire== | ==Date de ieșire== | ||
Fișierul 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== | ==Restricții și precizări== | ||
*șirul va conține cel mult '''254''' de paranteze | *șirul va conține cel mult '''254''' de paranteze | ||
== | ==Exemplul 1:== | ||
''' | '''paranteze2in.txt''' | ||
:1 | |||
:()((()())()) | :()((()())()) | ||
''' | '''paranteze2out.txt''' | ||
:Datele de intrare corespund restrictiilor impuse. | |||
:3 | :3 | ||
==Exemplul 2:== | |||
'''paranteze2in.txt''' | |||
:h | |||
'''paranteze2out.txt''' | |||
:Datele de intrare nu corespund restrictiilor impuse. | |||
==Rezolvare== | ==Rezolvare== | ||
Line 34: | Line 48: | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
def | 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") | |||
if adancime_curenta | 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> | </syntaxhighlight> |
Latest revision as of 22:05, 13 November 2023
Cerința[edit | edit source]
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[edit | edit source]
Fișierul de intrare paranteze2in.txt conține pe prima un șir de paranteze rotunde, corect parantezat.
Date de ieșire[edit | edit source]
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[edit | edit source]
- șirul va conține cel mult 254 de paranteze
Exemplul 1:[edit | edit source]
paranteze2in.txt
- 1
- ()((()())())
paranteze2out.txt
- Datele de intrare corespund restrictiilor impuse.
- 3
Exemplul 2:[edit | edit source]
paranteze2in.txt
- h
paranteze2out.txt
- Datele de intrare nu corespund restrictiilor impuse.
Rezolvare[edit | edit source]
<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>