3. Całe zadanie: liczba Pi w wyniki3.txt
Matura maj 2023 - Matura z informatyki: arkusze krok po kroku (Python)
Pełne rozwiązanie zadań 3.1-3.4 jednym programem na pliku `pi.txt`, z odpowiedziami w jednym pliku `wyniki3.txt`.
def rise_fall(seq):
n = len(seq)
if n < 4:
return False
up = 1 # długość rosnącego początku ciągu
while up < n and seq[up - 1] < seq[up]:
up = up + 1
down = 1 # długość malejącego końca ciągu
while down < n and seq[n - down - 1] > seq[n - down]:
down = down + 1
# część rosnąca ma k wyrazów, malejąca n - k: obie co najmniej 2, rosnąca mieści się
# w rosnącym początku, a malejąca w malejącym końcu
return max(2, n - down) <= min(up, n - 2)
with open("pi.txt") as f:
digits = [int(line) for line in f] # jedna cyfra w każdym wierszu
# 3.1 fragment z pozycji i, i+1 jako liczba: 10 * pierwsza cyfra + druga
over90 = sum(1 for i in range(len(digits) - 1) if 10 * digits[i] + digits[i + 1] > 90)
# 3.2 liczba wystąpień każdego ze 100 fragmentów 00-99 (także takich, których nie ma)
count = [0] * 100
for i in range(len(digits) - 1):
count[10 * digits[i] + digits[i + 1]] += 1
rarest = count.index(min(count)) # index() daje pierwszy, czyli o mniejszej wartości
commonest = count.index(max(count))
# 3.3 wszystkie okna po 6 kolejnych cyfr
six = sum(1 for i in range(len(digits) - 5) if rise_fall(digits[i:i + 6]))
# 3.4 cyfry rosną najwyżej 10 razy z rzędu (0-9) i tyle samo maleją, więc ciąg
# rosnąco-malejący ma najwyżej 20 cyfr: wystarczą fragmenty długości od 4 do 20
best_start, best_length = 0, 0
for i in range(len(digits)):
for length in range(4, 21):
if i + length <= len(digits) and length > best_length and rise_fall(digits[i:i + length]):
best_start, best_length = i, length
longest = "".join(str(d) for d in digits[best_start:best_start + best_length])
with open("wyniki3.txt", "w", encoding="utf-8") as out:
print("3.1", over90, file=out)
print("3.2", file=out)
print(f"{rarest:02d}", count[rarest], file=out)
print(f"{commonest:02d}", count[commonest], file=out)
print("3.3", six, file=out)
print("3.4", file=out)
print(best_start + 1, file=out)
print(longest, file=out)
print(open("wyniki3.txt", encoding="utf-8").read())Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu Matura z informatyki: arkusze krok po kroku·Zaloguj się, aby zapisać postęp na koncie.