# Informatyka — zadanie 6.4

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

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

## Treść

Zadanie 6.4. (0-3)
Dla każdego kraju, którego reprezentanci zdobywali punkty w sezonie 2012, podaj liczbę tych
reprezentantów.
MIN_2R
Do oceny oddajesz:
• plik tekstowy wynik6.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ń:
Wypełnia
egzaminator
Nr zadania
6.1.
6.2.
6.3.
6.4.
Maks. liczba pkt.
2
2
3
3
Uzyskana liczba pkt.
MIN_2R
BRUDNOPIS (nie podlega ocenie)

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

## Poprawna odpowiedź

| Kraj | Liczba zawodników |
| Australia | 2 |
| Brazylia | 2 |
| Finlandia | 1 |
| Francja | 2 |
| Hiszpania | 1 |
| Japonia | 1 |
| Meksyk | 1 |
| Niemcy | 4 |
| Wenezuela | 1 |
| Wielka Brytania | 3 |

Łącznie 10 krajów, 18 punktujących kierowców w sezonie 2012.

## Sposób 1 - SQL (DISTINCT + GROUP BY + filtr Punkty > 0)

Kluczowa idea: liczyć tylko tych kierowców, którzy ZDOBYWALI punkty w 2012, nie wszystkich kierowców z kraju.

```sql
SELECT k.Kraj, COUNT(DISTINCT k.Id_kierowcy) AS LiczbaZawodnikow
FROM Kierowcy k
INNER JOIN Wyniki wn ON k.Id_kierowcy = wn.Id_kierowcy
INNER JOIN Wyscigi w ON wn.Id_wyscigu = w.Id_wyscigu
WHERE w.Rok = 2012 AND wn.Punkty > 0
GROUP BY k.Kraj
ORDER BY k.Kraj;

**Wynik:**
Australia 2
Brazylia 2
Finlandia 1
Francja 2
Hiszpania 1
Japonia 1
Meksyk 1
Niemcy 4
Wenezuela 1
Wielka Brytania 3

## Sposób 2 - Python (pandas)

```python
import pandas as pd

kierowcy = pd.read_csv('Kierowcy.txt', sep=';', header=None,
names=['Id_k', 'Nazwisko', 'Imie', 'Kraj'])
wyscigi = pd.read_csv('Wyscigi.txt', sep=';', header=None,
names=['Id_w', 'Rok', 'GrandPrix'])
wyniki = pd.read_csv('Wyniki.txt', sep=';', header=None,
names=['Id_k', 'Punkty', 'Id_w'])

# Filtr: rok 2012 i punkty > 0
w2012 = wyniki.merge(wyscigi, on='Id_w')
w2012 = w2012[(w2012['Rok'] == 2012) & (w2012['Punkty'] > 0)]

# Unikalne ID kierowcow w 2012
id_punktujacych = w2012['Id_k'].unique()
kierowcy_2012 = kierowcy[kierowcy['Id_k'].isin(id_punktujacych)]

# Liczba unikalnych kierowcow per kraj
wynik = kierowcy_2012.groupby('Kraj')['Id_k'].nunique().sort_index()
print(wynik)

## Sposób 3 - arkusz kalkulacyjny

**Krok 1:** Wczytaj 3 pliki. Połącz Wyniki + Wyscigi po Id_w (dodaj kolumnę Rok).

**Krok 2:** Filtruj: Rok = 2012 i Punkty > 0.

**Krok 3:** Usuń duplikaty po Id_kierowcy (pozostawiamy każdego kierowcę raz).

**Krok 4:** Dodaj kolumnę Kraj przez WYSZUKAJ.PIONOWO po Id_k.

**Krok 5:** Tabela przestawna: Wiersze = Kraj, Wartości = LICZ(Id_k).

## Reference informatyczny - DISTINCT + GROUP BY

> Reference - Liczenie unikalnych w grupach:
> - **COUNT(DISTINCT kol)** - liczy unikalne wartości w grupie (kluczowe, bo jeden kierowca może mieć kilka wyników w 2012).
> - **WHERE Punkty > 0** - filtruje wyniki PRZED grupowaniem (ważne: zadanie mówi "zdobywali punkty", więc Punkty = 0 nie liczy się).
> - Bez DISTINCT zliczalibyśmy liczbę punktujących WYNIKÓW per kraj, a nie liczbę kierowców.

## Schemat oceniania CKE

> Klucz CKE (zadanie 6.4, max 3 pkt):
> - **3 pkt** - poprawne zestawienie wszystkich odpowiedzi (10 krajów z prawidłowymi liczbami zawodników).
> - **1 pkt** - zestawienie z błędnym grupowaniem (zliczenie WSZYSTKICH kierowców kraju, nie tylko punktujących w 2012).
> - **0 pkt** - odpowiedź niepełna lub błędna albo brak.
> - **UWAGA:** Nie przyznaje się 2 pkt.

## Typowe pułapki

- **"Zdobywali punkty" = Punkty > 0** - krytyczny warunek. Pominięcie tego filtra to typowy błąd punktowany 1 pkt zamiast 3.
- **DISTINCT obowiązkowe** - bez niego liczymy wyniki, nie kierowców. Jeden kierowca może mieć 5+ punktujących wyników w 2012.
- **Filtr sezonu 2012** - bez tego filtra otrzymujemy wszystkich punktujących kierowców z całych 13 sezonów.
- **Polskie nazwy krajów** - zachowaj pisownię z pliku (Wielka Brytania z dużej, nie "Wlk. Brytania").
- **Sortowanie alfabetyczne** - zalecane (`ORDER BY k.Kraj`), choć nie wymagane.

## Złożoność obliczeniowa

- 2 JOIN-y po kluczach: O(N log N) z indeksami.
- GROUP BY z DISTINCT (hash set): O(N).
- ORDER BY: O(K log K), gdzie K = liczba krajów (małe).
- **Całkowita: O(N log N)**.

## Linki

- [dane JSON](https://matura.lol/api/question/maturazai-informatyka-inf-2015-05/zad/6.4)
- [otwórz w wyszukiwarce](https://matura.lol/?problem=maturazai-informatyka-inf-2015-05%2Fzad%2F6.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_
