3.3 Ciąg rosnąco-malejący

Matura maj 2023 - Matura z informatyki: arkusze krok po kroku (Python)

Ciąg co najmniej 4-wyrazowy jest **rosnąco-malejący**, gdy da się go podzielić na część ściśle rosnącą i ściśle malejącą, obie co najmniej 2-wyrazowe. Funkcja liczy długość rosnącego początku i malejącego końca, a potem sprawdza, czy podział jest możliwy. Uwaga na ciąg (5, 9, 9, 4, 1): jest rosnąco-malejący, bo podział (5, 9) i (9, 4, 1) jest poprawny. Program sprawdza wszystkie przykłady z arkusza.

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)


for seq in [(2, 5, 7, 9, 8, 3, 1), (5, 9, 9, 4, 1), (2, 5, 8, 4, 3, 4, 5), (1, 2, 3, 4), (5, 5, 3, 2, 1), (1, 2, 3, 4, 5, 4)]:
    print(seq, rise_fall(seq))

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