Matura informatyka 2020: Zadanie 4. Pary - rozwiązanie w Pythonie


Najpierw wczytam dane z pliku pary.txt do programu oraz otworzę plik do którego będziemy zapisywać odpowiedzi (wyniki4.txt).
Dla prostoty, cały program napiszę w jednym pliku.
Plik wyniki.txt zamieszczam na samym końcu tego artykułu.

# wczytywanie pliku
pairs_file = open("pary.txt", "r")
pairs = []
for _ in range(100):
    n, word = pairs_file.readline().split()
    pairs.append([int(n), word])
pairs_file.close()

# otwórz plik z odpowiedziami
odp = open("wyniki4.txt", "w")

# funkcja sprawdzająca czy liczba jest liczbą pierwszą
def czy_pierwsza(n):
    if n == 2:
        return True
    if n % 2 == 0 or n <= 1:
        return False

    pierw = int(n**0.5) + 1
    for dzielnik in range(3, pierw, 2):
        if n % dzielnik == 0:
            return False
    return True

# zadanie 4.1.
odp.write("Zadanie 4.1.\n")
for [n, _] in pairs:
    if n % 2 == 0 and n > 4:
        for i in range(3, n, 2):
            if czy_pierwsza(i) and czy_pierwsza(n-i):
                odp.write(f"{n} {i} {n-i}\n")
                break

# zadanie 4.2.
odp.write("\nZadanie 4.2.\n")
for [_, word] in pairs:
    max_ = 1
    max_letter = word[0]
    cur_max = 1
    for i in range(len(word)-1):
        if word[i] == word[i+1]:
            cur_max += 1
        else:
            cur_max = 1
        if cur_max > max_:
            max_ = cur_max
            max_letter = word[i]
    odp.write(f"{max_ * max_letter} {max_}\n")

# zadanie 4.3.
odp.write("\nZadanie 4.3.\n")
filtered = list(filter(lambda pair: pair[0] == len(pair[1]), pairs))
min_pair = filtered[0]
for i in range(len(filtered)-1):
    if filtered[i][0] < filtered[i+1][0] or (filtered[i][0] == filtered[i+1][0] and filtered[i][1] < filtered[i+1][1]):
        min_pair = filtered[i]
odp.write(f"{min_pair[0]} {min_pair[1]}\n")

odp.close()

Zawartość pliku wyniki4.txt:

Zadanie 4.1.
68 7 61
24 5 19
48 5 43
12 5 7
42 5 37
66 5 61
78 5 73
88 5 83
76 3 73
64 3 61
24 5 19
22 3 19
64 3 61
18 5 13
36 5 31
42 5 37
56 3 53
30 7 23
44 3 41
28 5 23
94 5 89
28 5 23
52 5 47
28 5 23
6 3 3
36 5 31
34 3 31
58 5 53

Zadanie 4.2.
d 1
tt 2
a 1
lllllll 7
ooooo 5
wwwwww 6
aaaaaaaaaaa 11
jj 2
aaaaaaaaaaaa 12
ttt 3
qqq 3
uu 2
s 1
pppp 4
sssssssssssss 13
ww 2
mm 2
ddddd 5
ss 2
ll 2
xxx 3
ttttt 5
hhhhhhhhh 9
ggggggg 7
pppp 4
w 1
kkkkkkkkk 9
v 1
x 1
z 1
ttttttt 7
c 1
tttttttttttt 12
yyyyyyyyyyyy 12
ccc 3
j 1
aaaaa 5
a 1
r 1
gg 2
zzzzzzzz 8
jj 2
oooooooooooooooo 16
ppppp 5
dddddd 6
pppp 4
x 1
pppp 4
d 1
sssss 5
aaaaaaa 7
pppp 4
kkkkkkkk 8
wwwwww 6
xxxx 4
s 1
gggg 4
bb 2
z 1
o 1
mmmmm 5
aaaaaaa 7
l 1
llll 4
ggggg 5
aaaaa 5
jjjjjjjjjj 10
a 1
jj 2
kkkkk 5
d 1
kkkkk 5
eee 3
tttttttttt 10
bbb 3
uuuuuuuuuu 10
dddd 4
ggggggggg 9
lll 3
ttttttttttttttttttttttttttttttttt 33
i 1
fffff 5
dd 2
bb 2
a 1
h 1
hh 2
aaaa 4
dddddddd 8
ee 2
d 1
rrrrrrrrrrrrrr 14
jjjjjjj 7
n 1
aaaaaaa 7
s 1
a 1
uuuu 4
jj 2
d 1

Zadanie 4.3.
3 ast