0848 - Paranteze1: Difference between revisions
Pagină nouă: ==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 '''paranteze1.in''' conține pe prima lin... |
No edit summary |
||
Line 11: | Line 11: | ||
==Date de intrare== | ==Date de intrare== | ||
Fișierul 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== | ==Date de ieșire== | ||
Fișierul 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== | ==Restricții și precizări== | ||
Line 22: | Line 22: | ||
*fiecare șir va avea cel mult '''255''' de paranteze | *fiecare șir va avea cel mult '''255''' de paranteze | ||
== | ==Exemplul 1:== | ||
''' | '''paranteze1in.txt''' | ||
:4 | :4 | ||
Line 32: | Line 32: | ||
:()( | :()( | ||
''' | '''paranteze1out.txt''' | ||
:Datele de intrare corespund restrictiilor impuse. | |||
:1 | :1 | ||
:0 | :0 | ||
:1 | :1 | ||
:0 | :0 | ||
==Exemplul 2:== | |||
'''paranteze1in.txt''' | |||
:2h | |||
'''paranteze1out.txt''' | |||
:Datele de intrare nu corespund restrictiilor impuse | |||
==Rezolvare== | ==Rezolvare== | ||
Line 43: | Line 54: | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
# | def validare(numar, string): # functia de validare a datelor de intrare | ||
def este_corect_parantezat(s): | 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 = [] | stiva = [] | ||
for paranteza in s: | for paranteza in s: | ||
if paranteza == '(': | if paranteza == '(': | ||
stiva.append(paranteza) | stiva.append(paranteza) | ||
elif paranteza == ')': | elif paranteza == ')': | ||
if len(stiva) == 0: | if len(stiva) == 0: | ||
return 0 | return 0 | ||
stiva.pop() | stiva.pop() | ||
return 1 if len(stiva) == 0 else 0 | 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: | 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 21:35, 13 November 2023
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>