3.2 b) Środek odcinka

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

Zadanie 3.2 b) (2 pkt): trzy punkty, z których jeden jest środkiem odcinka o końcach w pozostałych. Sprawdzamy każdą parę punktów (dwie pętle, `j > i`) i szukamy środka wśród wszystkich punktów: zbiór `set` sprawdza przynależność od razu. Środek ma współrzędne całkowite tylko wtedy, gdy sumy współrzędnych są parzyste. Dla pliku przykładowego: (14000, 3014), (16000, 2010), (18000, 1006). Same współrzędne x dają 1 z 2 punktów.

moves = []
with open("dron_przyklad.txt") as f:
    for line in f:
        a, b = line.split()
        moves.append((int(a), int(b)))


def gcd(a, b):
    # algorytm Euklidesa; gcd(a, 0) = a, jak w uwadze do zadania
    while b > 0:
        a, b = b, a % b
    return a


# 3.1 wartości bezwzględne: ruch w dół ma ujemne B
count = sum(1 for a, b in moves if gcd(abs(a), abs(b)) > 1)

# 3.2 punkty po kolejnych ruchach: sumy przesunięć
points = []
x = y = 0
for a, b in moves:
    x, y = x + a, y + b
    points.append((x, y))
inside = sum(1 for x, y in points if 0 < x < 5000 and 0 < y < 5000)

# 3.2 b) środek odcinka: suma współrzędnych końców musi być parzysta
known = set(points)
triple = None
for i in range(len(points)):
    for j in range(i + 1, len(points)):
        (x1, y1), (x2, y2) = points[i], points[j]
        if (x1 + x2) % 2 == 0 and (y1 + y2) % 2 == 0:
            middle = ((x1 + x2) // 2, (y1 + y2) // 2)
            if middle in known and middle not in (points[i], points[j]):
                triple = (points[i], middle, points[j])

print("3.1", count)
print("3.2 a)", inside)
print("3.2 b)", triple)

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