0848 - Paranteze1

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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