# Informatyka — zadanie 6.5

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

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

## Treść

Zadanie 6.5. (0-2)
Podaj liczbę komputerów, które nie uległy żadnej awarii o priorytecie większym lub równym
8 (wliczamy w to też komputery, które w ogóle nie uległy awarii).
Do oceny oddajesz:
• plik tekstowy wyniki6.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
6.1.
6.2.
6.3.
6.4.
6.5.
Maks. liczba pkt.
2
2
3
3
2
Uzyskana liczba pkt.
MIN_1R
BRUDNOPIS (nie podlega ocenie)

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

## Poprawna odpowiedź

**149 komputerów**

## Sposób 1 - interpretacja

**Cel:** liczba komputerów, które NIE MIAŁY ŻADNEJ awarii z priorytetem ≥ 8.
Inaczej: wszyscy komputerzy MINUS ci, którzy mieli choć jedną awarię z priorytetem ≥ 8.

## Sposób 2 - SQL (NOT EXISTS / NOT IN / LEFT JOIN)

**Wariant 1 - NOT IN:**
```sql
SELECT COUNT(*) FROM komputery
WHERE Numer_komputera NOT IN (
SELECT DISTINCT Numer_komputera
FROM awarie
WHERE Priorytet >= 8
);

**Wariant 2 - NOT EXISTS:**
```sql
SELECT COUNT(*) FROM komputery k
WHERE NOT EXISTS (
SELECT 1 FROM awarie a
WHERE a.Numer_komputera = k.Numer_komputera AND a.Priorytet >= 8
);

**Wariant 3 - odejmowanie:**
```sql
SELECT (SELECT COUNT(*) FROM komputery) -
(SELECT COUNT(DISTINCT Numer_komputera) FROM awarie WHERE Priorytet >= 8);

Wynik: **149**.

## Sposób 3 - Python

```python
wszyscy = set()
with open('komputery.txt', encoding='utf-8') as f:
next(f)
for linia in f:
cz = linia.strip().split('\t')
if len(cz) >= 1:
wszyscy.add(cz[0])

z_wysokim = set()
with open('awarie.txt', encoding='utf-8') as f:
next(f)
for linia in f:
cz = linia.strip().split('\t')
if len(cz) >= 4:
kom, prio = cz[1], int(cz[3])
if prio >= 8:
z_wysokim.add(kom)

bez_wysokim = wszyscy - z_wysokim
print(len(bez_wysokim)) # 149

## Sposób 4 - arkusz kalkulacyjny

1. awarie.txt: filtruj na priorytet >= 8 → odzyskaj listę unikalnych Numer_komputera.
2. Policz unikalnych komputerów: powiedzmy X.
3. Wszyscy komputery: powiedzmy K (~330).
4. Wynik = K - X.

Lub przez SUMA.JEŻELI z warunkiem zawartości w liście awarii.

## Reference informatyczny - antyjoin

> Reference - Trzy sposoby antyjoinu:
> - **NOT EXISTS** - najbezpieczniejszy z NULLami, najszybszy z indeksem.
> - **NOT IN** - uważać na NULLe w podzapytaniu (zwraca pustą listę).
> - **LEFT JOIN + WHERE NULL** - często bardzo wydajny.
>
> Reference - Set difference w Pythonie:
> - `A - B` zwraca elementy w A ale nie w B.
> - **Złożoność**: O(|A| + |B|).
> - Bezpieczne, czytelne, idiomatyczne.
>
> Reference - Warunek priorytetu:
> - "większy lub równy 8" = `>= 8` = priorytet 8, 9, 10.
> - "większy od 8" = `> 8` = priorytet 9, 10. **Częsta pomyłka** - daje wynik 221.

## Schemat oceniania CKE

> Klucz CKE (zadanie 6.5, max 2 pkt):
> - **2 pkt** - wynik **149** (priorytet >= 8)
> - **1 pkt** - wynik **221** (tylko priorytet > 8, ekskluzywnie)
> - **0 pkt** - inne błędne lub brak

## Typowe pułapki

- **"Większy lub równy" mylone z "większy"** - KRYTYCZNA pułapka. >= 8 vs > 8. Wynik 149 vs 221.
- **Pominięcie komputerów BEZ żadnej awarii** - treść jasno mówi "wliczamy też tych bez awarii". NOT IN/NOT EXISTS to zapewnia, ale podejście naiwne (LEFT JOIN na awarie z warunkiem) może je pominąć.
- **COUNT(DISTINCT)** zamiast set - w SQL konieczne, bo komputer może mieć wiele wysokich awarii.
- **Pominięcie konwersji int** - `int(cz[3])` w Pythonie, bo string "10" < "8" leksykograficznie.

## Złożoność obliczeniowa

- Wczytanie 2 plików: O(K + A).
- Set operations: O(K + A) amortyzowane.
- **Łącznie: O(K + A).**

## Linki

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

## 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_
