Informator maturalny 2023: Zadanie 2

Arkusz i pliki wymieniane w tym zadaniu można pobrać ze strony CKE.
Bezpośredni link do plików znajduje się tutaj.

Zadanie

Wyrażeniem nawiasowym nazywamy dowolny skończony ciąg nawiasów: [ i ].

Przykładowo: [[][]]

Wyrażenie nawiasowe jest poprawne, jeśli:

  • jest wyrażeniem pustym (nie zawiera żadnych nawiasów),
  • jest postaci AB, gdzie A i B są poprawnymi wyrażeniami nawiasowymi,
  • jest postaci [A], gdzie A jest poprawnym wyrażeniem nawiasowym.

Przykład: wyrażenia [[]] oraz [[][]] są poprawne. Niepoprawne jest za to wyrażenie []][]].

Niech w1, w2, …, wn będą kolejnymi nawiasami w pewnym wyrażeniu nawiasowym W. Przyjmijmy teraz, że z każdym nawiasem otwierającym [ wiążemy liczbę +1, a z każdym nawiasem zamykającym ] – liczbę -1. Niech si będzie liczbą związaną z nawiasem wi. Wówczas głębokością nawiasu wk w wyrażeniu W nazywamy sumę:

Sk = s1 + s2 + … + sk

Głębokością wyrażenia W nazwiemy największą głębokość jego nawiasów, czyli maksimum z liczb Sk.

Zadanie 2.3 (0-3)

Dane w pliku dane2_3.txt zapisano w oddzielnych wierszach. W każdym wierszu znajduje się poprawne wyrażenie nawiasowe złożone z nawiasów kwadratowych (nieoddzielonych żadnym znakiem). Zapisz program, który dla zadanych wyrażeń nawiasowych w pliku dane2_3.txt obliczy ich głębokości.

Do oceny oddajesz:

  • plik zadanie2_3.txt zawierający odpowiedź do zadania (głębokości kolejnych wyrażeń, każda w osobnym wierszu)
  • pliki(i) z komputerową realizacją zadania (kodem programu).

Rozwiązanie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def glebokosc(s): #Funkcja badająca głębokość jednego wyrażenia
    tmp = 0
    res = 0
    for i in s:
        if i == '[':
            tmp += 1
            if tmp >= res: res = tmp
        else:
            tmp -= 1
    return str(res)

f = open('dane2_3.txt', 'r')
x = f.readlines()
x_new = [i.rstrip('\n') for i in x]
f.close()

f = open('zadanie2_3.txt', 'w')
for i in x_new:
    f.write(glebokosc(i))
    f.write('\n')

Zadanie 2.4 (0-3)

Napisz program, który dla wyrażeń nawiasowych zapisanych w pliku dane2_4.txt sprawdzi, czy są one poprawne. Dane w pliku zapisano po jednym wyrażeniu w wierszu, podobnie jak w pliku o nazwie dane2_3.txt.

Do oceny oddajesz:

  • plik zadanie2_4.txt zawierający odpowiedź do zadania (w kolejnych wierszach odpowiedzi ‘tak’, jeśli wyrażenie jest poprawne lub ‘nie’ – jeśli jest niepoprawne)
  • pliki(i) z komputerową realizacją zadania (kodem programu).

Rozwiązanie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def czy_poprawne(s): #Funkcja bilansująca nawiasy w wyrażeniu
    bilans = 0
    for i in s:
        if i == '[':
            bilans += 1
        else:
            bilans -= 1

        if bilans < 0:
            return 'nie\n'
    return 'tak\n'


f = open('dane2_4.txt', 'r')
x = f.readlines()
x_new = [i.rstrip('\n') for i in x]
f.close()

f = open('zadanie2_4.txt', 'w')
for i in x_new:
    f.write(czy_poprawne(i))