# Informatyka — zadanie 6.3

> Źródło: matura.lol — https://matura.lol/question/maturazai-informatyka-inf-2017-05/zad/6.3
> 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ść

Kontekst - patrz zadanie 6.1.

Sąsiednie piksele to takie, które leżą obok siebie w tym samym wierszu lub w tej samej kolumnie. Dwa sąsiednie piksele nazywamy kontrastującymi, jeśli ich wartości różnią się o więcej niż 128. Podaj liczbę wszystkich takich pikseli, dla których istnieje przynajmniej jeden kontrastujący z nim sąsiedni piksel.

Dla danych z pliku przyklad.txt wynikiem jest 5.

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

## Poprawna odpowiedź

**Liczba pikseli mających przynajmniej jednego kontrastującego sąsiada: 753** (z 64 000 pikseli w `dane.txt`).

Dla `przyklad.txt`: 5.

Kluczowe definicje:
- Sąsiad piksela (r, c): (r-1, c), (r+1, c), (r, c-1), (r, c+1) - góra, dół, lewo, prawo (4-sąsiedztwo).
- Kontrastujący: |A[r1][c1] - A[r2][c2]| > 128 (różnica BEZWZGLĘDNA, ostro większa).
- Liczymy KAŻDY piksel raz, jeśli MA przynajmniej jednego takiego sąsiada.

## Sposób 1 - Python (najczytelniejszy)

```python
# Wczytaj obraz jako liste list
with open('dane.txt') as f:
obraz = [[int(x) for x in linia.split()] for linia in f]

W, K = len(obraz), len(obraz[0]) # 200 wierszy, 320 kolumn
KONTRAST = 128
licznik = 0

for r in range(W):
for c in range(K):
v = obraz[r][c]
# Sprawdz 4 sasiadow
ma_kontrast = False
for dr, dc in [(-1,0), (1,0), (0,-1), (0,1)]:
nr, nc = r + dr, c + dc
if 0 <= nr < W and 0 <= nc < K:
if abs(obraz[nr][nc] - v) > 128:
ma_kontrast = True
break
if ma_kontrast:
licznik += 1

print(licznik) # 753

## Sposób 2 - C++ (z tablicą 2D)

```cpp
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

const int W = 200, K = 320;
int obraz[W][K];

int main() {
ifstream plik("dane.txt");
for (int r = 0; r < W; r++)
for (int c = 0; c < K; c++)
plik >> obraz[r][c];
int dr[] = {-1, 1, 0, 0};
int dc[] = {0, 0, -1, 1};
int licznik = 0;
for (int r = 0; r < W; r++) {
for (int c = 0; c < K; c++) {
for (int k = 0; k < 4; k++) {
int nr = r + dr[k], nc = c + dc[k];
if (nr >= 0 && nr < W && nc >= 0 && nc < K) {
if (abs(obraz[nr][nc] - obraz[r][c]) > 128) {
licznik++;
break; // wystarczy jeden kontrast
}
}
}
}
}
cout << licznik << endl; // 753
return 0;
}

## Sposób 3 - Pascal

```pascal
program Kontrast;
var
obraz: array[1 200, 1 320] of Integer;
r, c, nr, nc, k: Integer;
dr: array[1 4] of Integer = (-1, 1, 0, 0);
dc: array[1 4] of Integer = (0, 0, -1, 1);
licznik: Integer;
ma_kontrast: Boolean;
f: TextFile;
begin
AssignFile(f, 'dane.txt'); Reset(f);
for r := 1 to 200 do
for c := 1 to 320 do Read(f, obraz[r, c]);
CloseFile(f);
licznik := 0;
for r := 1 to 200 do
for c := 1 to 320 do
begin
ma_kontrast := False;
for k := 1 to 4 do
begin
nr := r + dr[k]; nc := c + dc[k];
if (nr >= 1) and (nr <= 200) and (nc >= 1) and (nc <= 320) then
if Abs(obraz[nr, nc] - obraz[r, c]) > 128 then
begin
ma_kontrast := True;
Break;
end;
end;
if ma_kontrast then Inc(licznik);
end;
Writeln(licznik); // 753
end.

## Reference algorytmiczny - 4-sąsiedztwo na siatce

> Reference - typowy wzór na 4 sąsiadów:
> - **dr/dc = [(-1,0), (1,0), (0,-1), (0,1)]** - góra, dół, lewo, prawo.
> - Sprawdzaj granice siatki: `0 <= nr < W and 0 <= nc < K` (Python) lub `nr >= 1 <= W` (Pascal indeksuje od 1).
> - **Wartość bezwzględna** - `abs( )` w Pythonie / `Abs( )` w Pascalu / `abs( )` w `<cmath>`.
> - **Optymalizacja:** `break` po znalezieniu pierwszego kontrastującego sąsiada - wystarczy jeden, by piksel zaliczyć.

## Schemat oceniania CKE

> Klucz CKE (zadanie 6.3, max 3 pkt):
> - **3 pkt** - prawidłowa odpowiedź: **753**.
> - **2 pkt** - odpowiedź **768** (różnica wartości większa lub RÓWNA 128 - błąd "≥" zamiast ">").
> - **1 pkt** - odpowiedź **166** lub **587** (brak wartości bezwzględnej - tylko jedna strona różnicy).
> - **1 pkt** - odpowiedź **1226** (wielokrotne zliczanie tego samego piksela, gdy ma kilku kontrastujących sąsiadów).
> - **1 pkt** - odpowiedź **747** / **750** / **752** (nie uwzględniono pikseli brzegowych - pomyłka z indeksami).
> - **0 pkt** - inna błędna lub brak.

## Typowe pułapki

- **Różnica BEZWZGLĘDNA** - `|a - b|` > 128, nie `a - b` > 128. Bez `abs()` tracimy połowę kontrastów (lub kradniemy 2 pkt z 3).
- **STRICTNIE większa od 128** - wartość 128 NIE jest kontrastem. Często studenci piszą `>= 128` i tracą punkty (otrzymują 768 zamiast 753).
- **Liczenie tego samego piksela WIELOKROTNIE** - jeśli piksel ma 2-3 kontrastujących sąsiadów, mimo to liczymy go RAZ. `break` po pierwszym kontraście rozwiązuje problem.
- **Brzegowe piksele** - piksele rogowe mają tylko 2 sąsiadów, krawędziowe 3. Sprawdzenie granic siatki obowiązkowe - inaczej out-of-bounds lub błędne wyniki (747/750/752).
- **4-sąsiedztwo vs 8-sąsiedztwo** - zadanie wyraźnie mówi "obok siebie w tym samym wierszu LUB w tej samej kolumnie", czyli 4-sąsiedztwo (bez diagonali).

## Złożoność obliczeniowa

- Wczytanie: O(n × m) = O(64 000).
- Iteracja po wszystkich pikselach × 4 sąsiadów: O(4 · n · m) = O(256 000).
- **Całkowita: O(n · m)**, liniowa względem rozmiaru obrazu.

## Linki

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

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