# Informatyka — zadanie 5.4

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2017-05/zad/5.4
> Wersja Markdown strony zadania (dla asystentów AI). Przy cytowaniu podaj matura.lol i link powyżej.

- arkusz: Informatyka · Matura · maj 2017 (rozszerzona)
- rok: 2017
- poziom: rozszerzona
- typ: open
- punkty: 3
- działy: Programowanie i algorytmika

## Treść

Zadanie 5.4. (0-3)
Podaj, ilu sędziów spośród tych zapisanych w pliku sedziowie.txt nie sędziowało
żadnego pucharowego meczu drużyny Galop Kucykowo.
Do oceny oddajesz:
• plik tekstowy wyniki5.txt zawierający odpowiedzi do poszczególnych zadań.
Odpowiedź do każdego zadania powinna być poprzedzona jego numerem.
• plik(i) zawierający(e) komputerową realizację Twoich obliczeń o nazwie(ach):
Wypełnia
egzaminator
Nr zadania
5.1.
5.2.
5.3.
5.4.
Maks. liczba pkt.
3
2
3
3
Uzyskana liczba pkt.
MIN_2R

## Rozwiązanie — maturazai.pl (AI)

## Poprawna odpowiedź

**Liczba sędziów, którzy NIE sędziowali żadnego pucharowego meczu Galop Kucykowo: 22**

W skład 22 wchodzą:
- **18** sędziów, którzy sędziowali jakieś mecze Galop Kucykowo, ale NIE pucharowe (np. ligowe lub towarzyskie).
- **4** sędziów z pliku sedziowie.txt, którzy w ogóle nie sędziowali żadnego meczu Galop Kucykowo.

## Sposób 1 - SQL (NOT IN / EXCEPT)

Najkrótsze podejście: znajdź sędziów, którzy sędziowali jakiś pucharowy mecz, a następnie zlicz tych, którzy NIE są na tej liście.

```sql
SELECT COUNT(*) AS liczba
FROM sedziowie
WHERE Nr_licencji NOT IN (
SELECT DISTINCT Nr_licencji
FROM wyniki
WHERE Rodzaj_meczu = 'P'
);

**Wynik:** `22`

Uwaga - całość `wyniki.txt` to mecze Galop Kucykowo (treść zadania 5.1: Gosia zapisuje TYLKO wyniki swojej drużyny), więc filtr `Rodzaj_meczu = 'P'` automatycznie ogranicza się do meczów Galop Kucykowo.

Alternatywnie z LEFT JOIN:
```sql
SELECT COUNT(*) AS liczba
FROM sedziowie s
LEFT JOIN (
SELECT DISTINCT Nr_licencji FROM wyniki WHERE Rodzaj_meczu = 'P'
) p ON s.Nr_licencji = p.Nr_licencji
WHERE p.Nr_licencji IS NULL;

## Sposób 2 - Python (zbiory)

```python
# Wczytaj wszystkich sedziow
sedziowie_all = set()
with open('sedziowie.txt', encoding='utf-8') as f:
next(f) # header
for line in f:
nr_lic, imie, nazwisko = line.strip().split('\t')
sedziowie_all.add(nr_lic)

# Znajdz sedziow ktorzy sedziowali jakis mecz pucharowy
sedziowie_puchar = set()
with open('wyniki.txt', encoding='utf-8') as f:
next(f)
for line in f:
parts = line.strip().split('\t')
rodzaj = parts[1]
nr_lic = parts[4]
if rodzaj == 'P':
sedziowie_puchar.add(nr_lic)

# Roznica zbiorow: sedziowie BEZ pucharowego meczu Galop
bez_pucharu = sedziowie_all - sedziowie_puchar
print(len(bez_pucharu)) # 22

## Sposób 3 - arkusz kalkulacyjny

**Krok 1:** Wczytaj sedziowie.txt do tabeli A (kolumna A = Nr_licencji).

**Krok 2:** Wczytaj wyniki.txt, filtruj po `Rodzaj_meczu = 'P'`, wyciągnij UNIKATOWE wartości Nr_licencji.

**Krok 3:** W kolumnie B obok każdego sędziego: `=LICZ.JEŻELI(zakres_pucharowych; A2)` - zwraca 0 jeśli sędzia nie sędziował pucharowego.

**Krok 4:** `=LICZ.JEŻELI(B:B; 0)` = 22.

## Reference algorytmiczny - różnica zbiorów

> Reference - operacja "NOT IN" / różnica zbiorów:
> - **SQL**: `WHERE x NOT IN (SELECT )` lub `LEFT JOIN WHERE IS NULL` (anty-join).
> - **Python**: `set_A - set_B` zwraca elementy w A, których nie ma w B.
> - **Złożoność**: O(N) przy użyciu set/hash dla obu zbiorów.
> - Alternatywa: `EXCEPT` w SQL (`SELECT Nr FROM sedziowie EXCEPT SELECT Nr FROM wyniki WHERE Rodzaj = 'P'`).

## Schemat oceniania CKE

> Klucz CKE (zadanie 5.4, max 3 pkt):
> - **3 pkt** - prawidłowa odpowiedź: **22** (wszyscy sędziowie z pliku którzy nie sędziowali żadnego pucharu Galop).
> - **2 pkt** - odpowiedź **18** (uwzględniono tylko sędziów, którzy sędziowali jakikolwiek inny mecz Galop Kucykowo, ale nie pucharowy - pominięto 4 sędziów, którzy nie sędziowali w ogóle).
> - **2 pkt** - odpowiedź **4** (uwzględniono tylko sędziów, którzy nie sędziowali żadnego meczu Galop).
> - **0 pkt** - inna błędna odpowiedź lub brak.
> - **UWAGA:** Nie przyznaje się 1 pkt.

## Typowe pułapki

- **Pominięcie sędziów którzy w ogóle nie sędziowali** - typowy błąd punktowany 2 pkt zamiast 3. Treść mówi "spośród tych zapisanych w sedziowie.txt", więc wszyscy sędziowie z tego pliku są w grupie startowej.
- **Wymagana DISTINCT** - w wyniki.txt jeden sędzia może sędziować wiele meczów pucharowych. Bez DISTINCT podzapytanie zwróciłoby duplikaty (ale NOT IN i tak by działał poprawnie).
- **Pomylenie kierunku** - pytanie o sędziów BEZ pucharu, nie sędziujących pucharowy mecz.
- **Filtr `Rodzaj_meczu = 'P'`** - tylko pucharowe. Mecze T (towarzyskie) i L (ligowe) nie liczą się.
- **Cała baza wyniki.txt to mecze Galop Kucykowo** - nie trzeba filtrować po Id_druzyny = Galop (bo Gosia zapisuje tylko swoją drużynę).

## Złożoność obliczeniowa

- SQL z NOT IN + DISTINCT: O(N + M) z hash, O(N · M) bez indeksów.
- Python z set: O(N + M).
- Anty-join (LEFT JOIN IS NULL): zwykle szybszy niż NOT IN dla dużych zbiorów.

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2017-05/zad/5.4)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2017-05%2Fzad%2F5.4)

## Podobne zadania

- [Zadanie 2](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/2) — Zadanie 2. Zapis symboliczny W pliku symbole.txt zapisano 2000 napisów. Każdy z nich jest zapisany w osobnym wierszu i składa się z dokładnie 12 znaków spośród:
- [Zadanie 7](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/7) — Zadanie 7. Poszukiwanie wody na Marsie W trzech plikach tekstowych o nazwach laziki.txt, obszary.txt, pomiary.txt zapisano informacje zawierające dane o poszuki
- [Zadanie 3](https://matura.lol/question/informatyka-2023-maj-matura-rozszerzona/zad/3) — Zadanie 3. Liczba Pi Pewien matematyk jest zafascynowany liczbą π ≈ 3,14159265 do tego stopnia, że zapisał jej rozwinięcie dziesiętne z dokładnością do 10 000 c
- [Zadanie 3](https://matura.lol/question/informatyka-2025-maj-matura-rozszerzona/zad/3) — Zadanie 3. Dron Tor lotu pewnego drona składa się z prostych odcinków. Lot rozpoczyna się w punkcie (0, 0), a kończy w punkcie (20000, 0). Dron poza startem i l

_Ostatnia aktualizacja danych: 2026-10-03_
