0848 - Paranteze1: Difference between revisions

From Bitnami MediaWiki
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 '''paranteze1.in''' conține pe prima linie numărul '''n''', pe următoarele '''n''' linii câte un șir de paranteze rotunde.
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 '''paranteze1.out''' 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.
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


==Exemplu:==
==Exemplul 1:==


'''paranteze1.in'''
'''paranteze1in.txt'''


:4
:4
Line 32: Line 32:
:()(
:()(


'''paranteze1.out'''
'''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">


# Functia care verifica daca un sir de paranteze este corect parantezat
def validare(numar, string):  # functia de validare a datelor de intrare
def este_corect_parantezat(s):
    if numar < 1 or numar > 100:
    # Initializam o stiva goala
        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 = []
    # Parcurgem fiecare paranteza din sir
     for paranteza in s:
     for paranteza in s:
        # Daca paranteza este deschisa, o adaugam in stiva
         if paranteza == '(':
         if paranteza == '(':
             stiva.append(paranteza)
             stiva.append(paranteza)
        # Daca paranteza este inchisa
         elif paranteza == ')':
         elif paranteza == ')':
            # Daca stiva este goala, inseamna ca sirul nu este corect parantezat
             if len(stiva) == 0:
             if len(stiva) == 0:
                 return 0
                 return 0
            # Altfel, scoatem o paranteza deschisa din stiva
             stiva.pop()
             stiva.pop()
    # Daca la final stiva este goala, sirul este corect parantezat
     return 1 if len(stiva) == 0 else 0
     return 1 if len(stiva) == 0 else 0


# Functia principala
def main():
    # Deschidem fisierul de intrare si citim datele
    with open('paranteze1.in', 'r') as fin:
        n = int(fin.readline().strip())  # Numarul de siruri
        siruri = [fin.readline().strip() for _ in range(n)]  # Sirurile de paranteze


     # Verificam daca fiecare sir este corect parantezat
if __name__ == '__main__':
     rezultate = [este_corect_parantezat(sir) for sir in siruri]
     file_in = open('paranteze1in.txt', 'r')
     file_out = open('paranteze1out.txt', 'w')


     # Scriem rezultatele in fisierul de iesire
     try:
    with open('paranteze1.out', 'w') as fout:
        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:
             fout.write(str(rezultat) + '\n')
             file_out.write(str(rezultat) + '\n')
 
    except ValueError:
# Apelam functia principala
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
if __name__ == '__main__':
    except IndexError:
    main()
        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>