0848 - Paranteze1

De la Universitas MediaWiki

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 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

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

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

Exemplul 1:

paranteze1in.txt

4
(())
)(()
()((()())())
()(

paranteze1out.txt

Datele de intrare corespund restrictiilor impuse.
1
0
1
0

Exemplul 2:

paranteze1in.txt

2h

paranteze1out.txt

Datele de intrare nu corespund restrictiilor impuse

Rezolvare

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")