0852 - Paranteze3

From Bitnami MediaWiki
Revision as of 08:47, 31 October 2023 by Bonte Lucas Gabriel (talk | contribs) (Pagină nouă: ==Cerința== Se dau '''n''' șiruri de paranteze rotunde sau pătrate. 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 = [T]''' și '''T''' este corect parantezat, sau *'''S = AB''', iar '''A''' și '''B''' sunt corect parantezate. ==Date de intra...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Se dau n șiruri de paranteze rotunde sau pătrate. 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 = [T] și T este corect parantezat, sau
  • S = AB, iar A și B sunt corect parantezate.

Date de intrare

Fișierul de intrare paranteze3.in conține pe prima linie numărul n, pe următoarele n linii câte un șir de paranteze rotunde sau pătrate.

Date de ieșire

Fișierul de ieșire paranteze3.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.

Restricții și precizări

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

Exemplu:

paranteze3.in

4
()[]
)([]
()[(()[])()]

([)]

paranteze3.out

1
0
1
0

Rezolvare

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

def verifica_paranteze(sir):

   stiva = []
   for paranteza in sir:
       if paranteza in "([":
           stiva.append(paranteza)
       else:
           if not stiva:
               return 0
           top = stiva.pop()
           if paranteza == ")" and top != "(":
               return 0
           elif paranteza == "]" and top != "[":
               return 0
   if stiva:
       return 0
   return 1

with open('paranteze3.in', 'r') as fin:

   n = int(fin.readline().strip())
   siruri = [fin.readline().strip() for _ in range(n)]

rezultate = [verifica_paranteze(sir) for sir in siruri]

with open('paranteze3.out', 'w') as fout:

   for rezultat in rezultate:
       fout.write(str(rezultat) + '\n')

</syntaxhighlight>