Najważniejsza rzecz w całym zadaniu: plik daje przesunięcia, nie pozycje. Punkty toru budujesz sumą narastającą, startując z (0, 0). Kto tego nie zauważy, liczy wszystko dalej na złych danych.
Arkusz CKE — maj 2025, rozszerzony
Przygotowanie danych
ruchy = []
with open('dron.txt') as f:
for linia in f:
A, B = map(int, linia.split())
ruchy.append((A, B))
punkty = []
x = y = 0
for A, B in ruchy:
x += A; y += B
punkty.append((x, y))
Dalej wszystko jest geometrią na liczbach całkowitych — bez float, bez zaokrągleń.
Zadanie 3.1 — ile przesunięć ma NWD większe od 1
def nwd(a, b):
while b:
a, b = b, a % b
return a
ile = 0
for A, B in ruchy:
if nwd(abs(A), abs(B)) > 1:
ile += 1
print(ile)
Kontrola na dron_przyklad.txt: 6
Odpowiedź dla dron.txt: 40
Zadanie 3.2a — punkty ściśle wewnątrz kwadratu
ile = sum(1 for (px, py) in punkty if 0 < px < 5000 and 0 < py < 5000)
Kontrola na dron_przyklad.txt: 2
Odpowiedź dla dron.txt: 24
Zadanie 3.2b — trójka punktów, jeden jest środkiem odcinka
Środek odcinka ma współrzędne będące średnią końców, ale dzielenie przez 2 wprowadza ułamki. Mnożysz obie strony przez 2 i testujesz na liczbach całkowitych.
n = len(punkty)
for k in range(n):
for i in range(n):
for j in range(i+1, n):
if i != k and j != k:
xm, ym = punkty[k]
x1, y1 = punkty[i]
x2, y2 = punkty[j]
if x1 + x2 == 2*xm and y1 + y2 == 2*ym:
print(punkty[i], punkty[k], punkty[j])
Kontrola na dron_przyklad.txt: (14000, 3014), (16000, 2010), (18000, 1006)
Odpowiedź dla dron.txt:
(5832, 1801), (7410, 1990), (8988, 2179)
Sto punktów i potrójna pętla to około miliona operacji — na maturze w zupełności akceptowalne. Nie szukaj sprytniejszego algorytmu.
Gdzie tracisz punkty
- Brak wartości bezwzględnych w 3.1. Przesunięcie w pionie bywa ujemne. Klucz CKE wprost wymienia błędne warianty: 26 przy pominięciu ujemnych, 39 albo 41 przy złym potraktowaniu pary z zerem. Poprawnie jest 40.
<=zamiast<w 3.2a. „Ściśle wewnątrz" znaczy bez krawędzi. Punkt ox = 5000się nie liczy.- Test środka na
float.(x1+x2)/2 == xmpotrafi zawieść przez nieprecyzyjność. Mnożenie przez 2 jest dokładne. - Dopisywanie
ifnaNWD(a, 0). Euklides zwraca to sam — gdyb = 0, pętla się nie wykonuje.
Ten sam wzorzec w innych arkuszach
Suma narastająca i „geometria na intach" to chwyty, które warto zapamiętać na stałe:
- maj 2026, zad. 3 — pary słów — ten sam szkielet czytania pliku i liczenia metryki
- grudzień 2024, zad. 3 — liczby czterocyfrowe — rozkład na czynniki, NWD i spółka
Z tego samego arkusza: zad. 1 (przestaw), zad. 5 (dodawanie binarne).
Mnożenie przez 2 zamiast dzielenia, żeby nie wpuścić float do zadania z liczbami całkowitymi — jeden z tych trików, które rozwiązują więcej niż jedno zadanie. Reszta w Variancie.


