# Informatyka — zadanie 5.2

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2017-05/zad/5.2
> 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: 2
- działy: Programowanie i algorytmika

## Treść

Kontekst - patrz zadanie 5.1.

Podaj listę zawierającą nazwy drużyn, z którymi drużyna Galop Kucykowo ma zerowy bilans bramkowy, tzn. łączna liczba bramek zdobytych we wszystkich meczach rozegranych z daną drużyną jest równa łącznej liczbie bramek straconych w tych meczach.

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

## Poprawna odpowiedź

**Drużyny z zerowym bilansem bramkowym z Galop Kucykowo:**
- **Zwinne Mewy** (Id_druzyny = 84)
- **Nocne Pumy** (Id_druzyny = 48)

## Sposób 1 - SQL

```sql
SELECT d.Nazwa,
SUM(w.Bramki_zdobyte) AS Z,
SUM(w.Bramki_stracone) AS S
FROM wyniki w
JOIN druzyny d ON w.Id_druzyny = d.Id_druzyny
GROUP BY d.Id_druzyny, d.Nazwa
HAVING SUM(w.Bramki_zdobyte) = SUM(w.Bramki_stracone);

Wynik:
Zwinne Mewy | X | X
Nocne Pumy | Y | Y

## Sposób 2 - Python

```python
from collections import defaultdict

# Wczytaj drużyny
druzyny = {} # Id → Nazwa
with open('druzyny.txt', encoding='utf-8') as f:
next(f)
for line in f:
idd, nazwa, miasto = line.strip().split('\t')
druzyny[int(idd)] = nazwa

# Agreguj zdobyte/stracone per Id
zdobyte = defaultdict(int)
stracone = defaultdict(int)
with open('wyniki.txt', encoding='utf-8') as f:
next(f)
for line in f:
parts = line.strip().split('\t')
idd = int(parts[3])
zdobyte[idd] += int(parts[5])
stracone[idd] += int(parts[6])

for idd in zdobyte:
if zdobyte[idd] == stracone[idd]:
print(druzyny[idd])
# Output:
# Zwinne Mewy
# Nocne Pumy

## Sposób 3 - arkusz kalkulacyjny

1. Zaimportuj wyniki.txt do kolumn A-G.
2. Tabela przestawna: Wiersze = Id_druzyny, Wartości = SUMA Bramki_zdobyte, SUMA Bramki_stracone.
3. Dodaj kolumnę różnicy: Zdobyte - Stracone.
4. Filtruj wiersze z różnicą = 0.
5. WYSZUKAJ.PIONOWO po Id_druzyny → Nazwa.

## Reference algorytmiczny - agregacja z warunkiem na wynikach

> Reference - HAVING z agregatami:
> - `HAVING SUM(a) = SUM(b)` filtruje grupy po WARTOŚCIACH agregatów.
> - Różnica vs WHERE: WHERE działa na pojedynczych wierszach, HAVING na grupach.
> - Klauzula HAVING wymaga GROUP BY (lub SELECT z agregatem bez kolumn).

## Schemat oceniania CKE

> Klucz CKE (zadanie 5.2, max 2 pkt):
> - **2 pkt** - za podanie dwóch poprawnych nazw drużyn (Zwinne Mewy, Nocne Pumy)
> - **1 pkt** - za podanie poprawnych dwóch Id_druzyny (84 i 48), ale bez nazw
> - **0 pkt** - błędna odpowiedź lub brak

## Typowe pułapki

- **Pominięcie nazwy** - treść wymaga NAZW drużyn, nie Id. Potrzebny JOIN z `druzyny`.
- **Niewłaściwe agregowanie** - trzeba SUMOWAĆ po WSZYSTKICH meczach z daną drużyną, nie tylko pojedynczy mecz (jednomeczowy bilans).
- **GROUP BY tylko po Id, nie po Nazwa** - w wielu SQL silnikach trzeba w GROUP BY mieć też kolumny SELECT, ale praktycznie Nazwa jest funkcyjnie zależna od Id, więc OK po GROUP BY Id.
- **„Zerowy bilans" interpretacja** - to NIE znaczy „zerowe bramki", ale RÓŻNICA = 0 (zdobyte = stracone).

## Złożoność obliczeniowa

- SQL z GROUP BY: O(n log n) z indeksami.
- Python: O(n) z słownikiem agregatów.

## Linki

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

## Podobne zadania

- [Zadanie 5.2](https://matura.lol/question/informatyka-2017-maj-matura-rozszerzona-2/zad/5.2) — Kontekst - patrz zadanie 5.1. Podaj listę zawierającą nazwy drużyn, z którymi drużyna Galop Kucykowo ma zerowy bilans bramkowy, tzn. łączna liczba bramek zdobyt
- [Zadanie 1](https://matura.lol/question/informatyka-2020-czerwiec-matura-rozszerzona/zad/1) — Zadanie 1. Podobne tablice Niech n będzie dodatnią liczbą całkowitą, a A[1 n] i B[1 n] będą n-elementowymi tablicami liczb całkowitych. Dla nieujemnej liczby ca
- [Zadanie 5.2](https://matura.lol/question/informatyka-2014-grudzien-probna-rozszerzona-2/zad/5.2) — Zadanie 5.2. Ile wynoszą długości najdłuższego oraz najkrótszego skoku Mateusza? Podaj, które to były wyniki, licząc od początku prowadzenia dziennika.

_Ostatnia aktualizacja danych: 2026-10-03_
